Average Error: 52.9 → 0.3
Time: 34.8s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1.0}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.994661063828435:\\ \;\;\;\;\log \left(\left(\frac{0.125}{\left(x \cdot x\right) \cdot x} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 0.8927244562157713:\\ \;\;\;\;\left(\frac{x}{1.0} \cdot \left(\frac{x}{\sqrt{1.0}} \cdot x\right)\right) \cdot \frac{-1}{6} + \left(\log \left(\sqrt{1.0}\right) + \frac{x}{\sqrt{1.0}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(x + \left(\left(\frac{0.5}{x} - \frac{0.125}{\left(x \cdot x\right) \cdot x}\right) + x\right)\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1.0}\right)
\begin{array}{l}
\mathbf{if}\;x \le -0.994661063828435:\\
\;\;\;\;\log \left(\left(\frac{0.125}{\left(x \cdot x\right) \cdot x} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\

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

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

\end{array}
double f(double x) {
        double r5204925 = x;
        double r5204926 = r5204925 * r5204925;
        double r5204927 = 1.0;
        double r5204928 = r5204926 + r5204927;
        double r5204929 = sqrt(r5204928);
        double r5204930 = r5204925 + r5204929;
        double r5204931 = log(r5204930);
        return r5204931;
}

double f(double x) {
        double r5204932 = x;
        double r5204933 = -0.994661063828435;
        bool r5204934 = r5204932 <= r5204933;
        double r5204935 = 0.125;
        double r5204936 = r5204932 * r5204932;
        double r5204937 = r5204936 * r5204932;
        double r5204938 = r5204935 / r5204937;
        double r5204939 = 0.5;
        double r5204940 = r5204939 / r5204932;
        double r5204941 = r5204938 - r5204940;
        double r5204942 = 0.0625;
        double r5204943 = 5.0;
        double r5204944 = pow(r5204932, r5204943);
        double r5204945 = r5204942 / r5204944;
        double r5204946 = r5204941 - r5204945;
        double r5204947 = log(r5204946);
        double r5204948 = 0.8927244562157713;
        bool r5204949 = r5204932 <= r5204948;
        double r5204950 = 1.0;
        double r5204951 = r5204932 / r5204950;
        double r5204952 = sqrt(r5204950);
        double r5204953 = r5204932 / r5204952;
        double r5204954 = r5204953 * r5204932;
        double r5204955 = r5204951 * r5204954;
        double r5204956 = -0.16666666666666666;
        double r5204957 = r5204955 * r5204956;
        double r5204958 = log(r5204952);
        double r5204959 = r5204958 + r5204953;
        double r5204960 = r5204957 + r5204959;
        double r5204961 = r5204940 - r5204938;
        double r5204962 = r5204961 + r5204932;
        double r5204963 = r5204932 + r5204962;
        double r5204964 = log(r5204963);
        double r5204965 = r5204949 ? r5204960 : r5204964;
        double r5204966 = r5204934 ? r5204947 : r5204965;
        return r5204966;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original52.9
Target44.8
Herbie0.3
\[\begin{array}{l} \mathbf{if}\;x \lt 0.0:\\ \;\;\;\;\log \left(\frac{-1.0}{x - \sqrt{x \cdot x + 1.0}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(x + \sqrt{x \cdot x + 1.0}\right)\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if x < -0.994661063828435

    1. Initial program 62.9

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

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

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

    if -0.994661063828435 < x < 0.8927244562157713

    1. Initial program 58.4

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

      \[\leadsto \color{blue}{\left(\frac{x}{\sqrt{1.0}} + \log \left(\sqrt{1.0}\right)\right) - \frac{1}{6} \cdot \frac{{x}^{3}}{{\left(\sqrt{1.0}\right)}^{3}}}\]
    3. Simplified0.4

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

    if 0.8927244562157713 < x

    1. Initial program 31.6

      \[\log \left(x + \sqrt{x \cdot x + 1.0}\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}{\left(x \cdot x\right) \cdot x}\right)\right)}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.3

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

Reproduce

herbie shell --seed 2019165 
(FPCore (x)
  :name "Hyperbolic arcsine"

  :herbie-target
  (if (< x 0.0) (log (/ -1.0 (- x (sqrt (+ (* x x) 1.0))))) (log (+ x (sqrt (+ (* x x) 1.0)))))

  (log (+ x (sqrt (+ (* x x) 1.0)))))