Average Error: 53.1 → 0.2
Time: 12.5s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.99895493447090078:\\ \;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\ \mathbf{elif}\;x \le 9.7630269793951311 \cdot 10^{-4}:\\ \;\;\;\;\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 + \sqrt{1} \cdot \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -0.99895493447090078:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\

\mathbf{elif}\;x \le 9.7630269793951311 \cdot 10^{-4}:\\
\;\;\;\;\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 + \sqrt{1} \cdot \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\

\end{array}
double f(double x) {
        double r201744 = x;
        double r201745 = r201744 * r201744;
        double r201746 = 1.0;
        double r201747 = r201745 + r201746;
        double r201748 = sqrt(r201747);
        double r201749 = r201744 + r201748;
        double r201750 = log(r201749);
        return r201750;
}

double f(double x) {
        double r201751 = x;
        double r201752 = -0.9989549344709008;
        bool r201753 = r201751 <= r201752;
        double r201754 = 0.125;
        double r201755 = 3.0;
        double r201756 = pow(r201751, r201755);
        double r201757 = r201754 / r201756;
        double r201758 = 0.5;
        double r201759 = r201758 / r201751;
        double r201760 = 0.0625;
        double r201761 = -r201760;
        double r201762 = 5.0;
        double r201763 = pow(r201751, r201762);
        double r201764 = r201761 / r201763;
        double r201765 = r201759 - r201764;
        double r201766 = r201757 - r201765;
        double r201767 = log(r201766);
        double r201768 = 0.0009763026979395131;
        bool r201769 = r201751 <= r201768;
        double r201770 = 1.0;
        double r201771 = sqrt(r201770);
        double r201772 = log(r201771);
        double r201773 = r201751 / r201771;
        double r201774 = r201772 + r201773;
        double r201775 = 0.16666666666666666;
        double r201776 = pow(r201771, r201755);
        double r201777 = r201756 / r201776;
        double r201778 = r201775 * r201777;
        double r201779 = r201774 - r201778;
        double r201780 = 1.0;
        double r201781 = sqrt(r201780);
        double r201782 = hypot(r201751, r201771);
        double r201783 = r201781 * r201782;
        double r201784 = r201751 + r201783;
        double r201785 = log(r201784);
        double r201786 = r201769 ? r201779 : r201785;
        double r201787 = r201753 ? r201767 : r201786;
        return r201787;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

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

    1. Initial program 62.8

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

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

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

    if -0.9989549344709008 < x < 0.0009763026979395131

    1. Initial program 58.9

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

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

    1. Initial program 31.8

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Using strategy rm
    3. Applied *-un-lft-identity31.8

      \[\leadsto \log \left(x + \sqrt{\color{blue}{1 \cdot \left(x \cdot x + 1\right)}}\right)\]
    4. Applied sqrt-prod31.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.99895493447090078:\\ \;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\ \mathbf{elif}\;x \le 9.7630269793951311 \cdot 10^{-4}:\\ \;\;\;\;\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 + \sqrt{1} \cdot \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 +o rules:numerics
(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)))))