Average Error: 53.1 → 0.3
Time: 14.7s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.004281043358186797931352884916123002768:\\ \;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\ \mathbf{elif}\;x \le 0.8904752561288424850260980747407302260399:\\ \;\;\;\;\frac{x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}}{\sqrt{1}} + \log \left(\sqrt{1}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(\left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right) + 2 \cdot x\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -1.004281043358186797931352884916123002768:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\

\mathbf{elif}\;x \le 0.8904752561288424850260980747407302260399:\\
\;\;\;\;\frac{x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}}{\sqrt{1}} + \log \left(\sqrt{1}\right)\\

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

\end{array}
double f(double x) {
        double r131117 = x;
        double r131118 = r131117 * r131117;
        double r131119 = 1.0;
        double r131120 = r131118 + r131119;
        double r131121 = sqrt(r131120);
        double r131122 = r131117 + r131121;
        double r131123 = log(r131122);
        return r131123;
}

double f(double x) {
        double r131124 = x;
        double r131125 = -1.0042810433581868;
        bool r131126 = r131124 <= r131125;
        double r131127 = 0.125;
        double r131128 = 3.0;
        double r131129 = pow(r131124, r131128);
        double r131130 = r131127 / r131129;
        double r131131 = 0.0625;
        double r131132 = 5.0;
        double r131133 = pow(r131124, r131132);
        double r131134 = r131131 / r131133;
        double r131135 = r131130 - r131134;
        double r131136 = 0.5;
        double r131137 = r131136 / r131124;
        double r131138 = r131135 - r131137;
        double r131139 = log(r131138);
        double r131140 = 0.8904752561288425;
        bool r131141 = r131124 <= r131140;
        double r131142 = 1.0;
        double r131143 = -0.16666666666666666;
        double r131144 = r131142 / r131143;
        double r131145 = r131129 / r131144;
        double r131146 = r131124 + r131145;
        double r131147 = sqrt(r131142);
        double r131148 = r131146 / r131147;
        double r131149 = log(r131147);
        double r131150 = r131148 + r131149;
        double r131151 = r131137 - r131130;
        double r131152 = 2.0;
        double r131153 = r131152 * r131124;
        double r131154 = r131151 + r131153;
        double r131155 = log(r131154);
        double r131156 = r131141 ? r131150 : r131155;
        double r131157 = r131126 ? r131139 : r131156;
        return r131157;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.1
Target45.4
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.0042810433581868

    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(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)}\]

    if -1.0042810433581868 < x < 0.8904752561288425

    1. Initial program 58.6

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

      \[\leadsto \color{blue}{\log \left(\sqrt{1}\right) + \left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right) \cdot \frac{x}{\sqrt{1}}}\]
    4. Using strategy rm
    5. Applied pow10.3

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

      \[\leadsto \log \left(\sqrt{1}\right) + \color{blue}{{\left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right)}^{1}} \cdot {\left(\frac{x}{\sqrt{1}}\right)}^{1}\]
    7. Applied pow-prod-down0.3

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

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

    if 0.8904752561288425 < x

    1. Initial program 32.2

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

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

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

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

Reproduce

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