Average Error: 52.5 → 0.2
Time: 57.4s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.0563392067882509:\\ \;\;\;\;\log \left(\left(\frac{\frac{\frac{\frac{1}{8}}{x}}{x}}{x} + \frac{\frac{-1}{2}}{x}\right) - \frac{\frac{1}{16}}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 0.9630124045933048:\\ \;\;\;\;{x}^{5} \cdot \frac{3}{40} + \left(x + x \cdot \left(\left(x \cdot x\right) \cdot \frac{-1}{6}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(x + \left(\frac{\frac{1}{2}}{x} + \left(x + \frac{\frac{-1}{8}}{x \cdot \left(x \cdot x\right)}\right)\right)\right)\\ \end{array}\]
double f(double x) {
        double r19784012 = x;
        double r19784013 = r19784012 * r19784012;
        double r19784014 = 1.0;
        double r19784015 = r19784013 + r19784014;
        double r19784016 = sqrt(r19784015);
        double r19784017 = r19784012 + r19784016;
        double r19784018 = log(r19784017);
        return r19784018;
}

double f(double x) {
        double r19784019 = x;
        double r19784020 = -1.0563392067882509;
        bool r19784021 = r19784019 <= r19784020;
        double r19784022 = 0.125;
        double r19784023 = r19784022 / r19784019;
        double r19784024 = r19784023 / r19784019;
        double r19784025 = r19784024 / r19784019;
        double r19784026 = -0.5;
        double r19784027 = r19784026 / r19784019;
        double r19784028 = r19784025 + r19784027;
        double r19784029 = 0.0625;
        double r19784030 = 5.0;
        double r19784031 = pow(r19784019, r19784030);
        double r19784032 = r19784029 / r19784031;
        double r19784033 = r19784028 - r19784032;
        double r19784034 = log(r19784033);
        double r19784035 = 0.9630124045933048;
        bool r19784036 = r19784019 <= r19784035;
        double r19784037 = 0.075;
        double r19784038 = r19784031 * r19784037;
        double r19784039 = r19784019 * r19784019;
        double r19784040 = -0.16666666666666666;
        double r19784041 = r19784039 * r19784040;
        double r19784042 = r19784019 * r19784041;
        double r19784043 = r19784019 + r19784042;
        double r19784044 = r19784038 + r19784043;
        double r19784045 = 0.5;
        double r19784046 = r19784045 / r19784019;
        double r19784047 = -0.125;
        double r19784048 = r19784019 * r19784039;
        double r19784049 = r19784047 / r19784048;
        double r19784050 = r19784019 + r19784049;
        double r19784051 = r19784046 + r19784050;
        double r19784052 = r19784019 + r19784051;
        double r19784053 = log(r19784052);
        double r19784054 = r19784036 ? r19784044 : r19784053;
        double r19784055 = r19784021 ? r19784034 : r19784054;
        return r19784055;
}

\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -1.0563392067882509:\\
\;\;\;\;\log \left(\left(\frac{\frac{\frac{\frac{1}{8}}{x}}{x}}{x} + \frac{\frac{-1}{2}}{x}\right) - \frac{\frac{1}{16}}{{x}^{5}}\right)\\

\mathbf{elif}\;x \le 0.9630124045933048:\\
\;\;\;\;{x}^{5} \cdot \frac{3}{40} + \left(x + x \cdot \left(\left(x \cdot x\right) \cdot \frac{-1}{6}\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{\frac{1}{2}}{x} + \left(x + \frac{\frac{-1}{8}}{x \cdot \left(x \cdot x\right)}\right)\right)\right)\\

\end{array}

Error

Bits error versus x

Target

Original52.5
Target44.6
Herbie0.2
\[\begin{array}{l} \mathbf{if}\;x \lt 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.0563392067882509

    1. Initial program 62.0

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

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

      \[\leadsto \log \color{blue}{\left(\left(\frac{\frac{-1}{2}}{x} + \frac{\frac{\frac{\frac{1}{8}}{x}}{x}}{x}\right) - \frac{\frac{1}{16}}{{x}^{5}}\right)}\]

    if -1.0563392067882509 < x < 0.9630124045933048

    1. Initial program 58.6

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

      \[\leadsto \color{blue}{\left(x + \frac{3}{40} \cdot {x}^{5}\right) - \frac{1}{6} \cdot {x}^{3}}\]
    3. Simplified0.2

      \[\leadsto \color{blue}{\left(\left(\left(x \cdot x\right) \cdot \frac{-1}{6}\right) \cdot x + x\right) + {x}^{5} \cdot \frac{3}{40}}\]

    if 0.9630124045933048 < x

    1. Initial program 31.0

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

      \[\leadsto \log \left(x + \color{blue}{\left(\left(x + \frac{1}{2} \cdot \frac{1}{x}\right) - \frac{1}{8} \cdot \frac{1}{{x}^{3}}\right)}\right)\]
    3. Simplified0.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.0563392067882509:\\ \;\;\;\;\log \left(\left(\frac{\frac{\frac{\frac{1}{8}}{x}}{x}}{x} + \frac{\frac{-1}{2}}{x}\right) - \frac{\frac{1}{16}}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 0.9630124045933048:\\ \;\;\;\;{x}^{5} \cdot \frac{3}{40} + \left(x + x \cdot \left(\left(x \cdot x\right) \cdot \frac{-1}{6}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(x + \left(\frac{\frac{1}{2}}{x} + \left(x + \frac{\frac{-1}{8}}{x \cdot \left(x \cdot x\right)}\right)\right)\right)\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< x 0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))

  (log (+ x (sqrt (+ (* x x) 1)))))