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

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

\end{array}
double f(double x) {
        double r140046 = x;
        double r140047 = r140046 * r140046;
        double r140048 = 1.0;
        double r140049 = r140047 + r140048;
        double r140050 = sqrt(r140049);
        double r140051 = r140046 + r140050;
        double r140052 = log(r140051);
        return r140052;
}

double f(double x) {
        double r140053 = x;
        double r140054 = -1.0046554685366835;
        bool r140055 = r140053 <= r140054;
        double r140056 = 0.125;
        double r140057 = 3.0;
        double r140058 = pow(r140053, r140057);
        double r140059 = r140056 / r140058;
        double r140060 = 0.5;
        double r140061 = r140060 / r140053;
        double r140062 = 0.0625;
        double r140063 = -r140062;
        double r140064 = 5.0;
        double r140065 = pow(r140053, r140064);
        double r140066 = r140063 / r140065;
        double r140067 = r140061 - r140066;
        double r140068 = r140059 - r140067;
        double r140069 = log(r140068);
        double r140070 = 0.8822245400237949;
        bool r140071 = r140053 <= r140070;
        double r140072 = 1.0;
        double r140073 = sqrt(r140072);
        double r140074 = log(r140073);
        double r140075 = r140053 / r140073;
        double r140076 = r140074 + r140075;
        double r140077 = 0.16666666666666666;
        double r140078 = pow(r140073, r140057);
        double r140079 = r140058 / r140078;
        double r140080 = r140077 * r140079;
        double r140081 = r140076 - r140080;
        double r140082 = 2.0;
        double r140083 = r140082 * r140053;
        double r140084 = r140059 - r140083;
        double r140085 = r140061 - r140084;
        double r140086 = log(r140085);
        double r140087 = r140071 ? r140081 : r140086;
        double r140088 = r140055 ? r140069 : r140087;
        return r140088;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.1
Target45.3
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.0046554685366835

    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.0046554685366835 < x < 0.8822245400237949

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

    1. Initial program 32.8

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

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

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

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

Reproduce

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