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

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

\end{array}
double f(double x) {
        double r80608 = x;
        double r80609 = r80608 * r80608;
        double r80610 = 1.0;
        double r80611 = r80609 + r80610;
        double r80612 = sqrt(r80611);
        double r80613 = r80608 + r80612;
        double r80614 = log(r80613);
        return r80614;
}

double f(double x) {
        double r80615 = x;
        double r80616 = -1.019295534059107;
        bool r80617 = r80615 <= r80616;
        double r80618 = 0.0625;
        double r80619 = -r80618;
        double r80620 = 5.0;
        double r80621 = pow(r80615, r80620);
        double r80622 = r80619 / r80621;
        double r80623 = 1.0;
        double r80624 = r80623 / r80615;
        double r80625 = 0.125;
        double r80626 = 2.0;
        double r80627 = pow(r80615, r80626);
        double r80628 = r80625 / r80627;
        double r80629 = 0.5;
        double r80630 = r80628 - r80629;
        double r80631 = r80624 * r80630;
        double r80632 = r80622 + r80631;
        double r80633 = log(r80632);
        double r80634 = 0.9006433647360576;
        bool r80635 = r80615 <= r80634;
        double r80636 = 1.0;
        double r80637 = sqrt(r80636);
        double r80638 = log(r80637);
        double r80639 = r80615 / r80637;
        double r80640 = r80638 + r80639;
        double r80641 = 0.16666666666666666;
        double r80642 = 3.0;
        double r80643 = pow(r80615, r80642);
        double r80644 = pow(r80637, r80642);
        double r80645 = r80643 / r80644;
        double r80646 = r80641 * r80645;
        double r80647 = r80640 - r80646;
        double r80648 = r80623 / r80643;
        double r80649 = r80625 * r80648;
        double r80650 = r80615 - r80649;
        double r80651 = r80629 / r80615;
        double r80652 = r80650 + r80651;
        double r80653 = r80615 + r80652;
        double r80654 = log(r80653);
        double r80655 = r80635 ? r80647 : r80654;
        double r80656 = r80617 ? r80633 : r80655;
        return r80656;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.0
Target44.9
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.019295534059107

    1. Initial program 62.9

      \[\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.0625}{{x}^{5}} + \frac{1}{x} \cdot \left(\frac{0.125}{{x}^{2}} - 0.5\right)\right)}\]

    if -1.019295534059107 < x < 0.9006433647360576

    1. Initial program 58.7

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

    1. Initial program 32.3

      \[\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(\left(x - 0.125 \cdot \frac{1}{{x}^{3}}\right) + \frac{0.5}{x}\right)}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.2

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

Reproduce

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