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

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

\end{array}
double f(double x) {
        double r107171 = x;
        double r107172 = r107171 * r107171;
        double r107173 = 1.0;
        double r107174 = r107172 + r107173;
        double r107175 = sqrt(r107174);
        double r107176 = r107171 + r107175;
        double r107177 = log(r107176);
        return r107177;
}

double f(double x) {
        double r107178 = x;
        double r107179 = -1.0077278576112656;
        bool r107180 = r107178 <= r107179;
        double r107181 = 0.0625;
        double r107182 = -r107181;
        double r107183 = 5.0;
        double r107184 = pow(r107178, r107183);
        double r107185 = r107182 / r107184;
        double r107186 = 1.0;
        double r107187 = r107186 / r107178;
        double r107188 = 0.125;
        double r107189 = 2.0;
        double r107190 = pow(r107178, r107189);
        double r107191 = r107188 / r107190;
        double r107192 = 0.5;
        double r107193 = r107191 - r107192;
        double r107194 = r107187 * r107193;
        double r107195 = r107185 + r107194;
        double r107196 = log(r107195);
        double r107197 = 0.882915536074428;
        bool r107198 = r107178 <= r107197;
        double r107199 = 1.0;
        double r107200 = sqrt(r107199);
        double r107201 = log(r107200);
        double r107202 = r107178 / r107200;
        double r107203 = r107201 + r107202;
        double r107204 = 0.16666666666666666;
        double r107205 = 3.0;
        double r107206 = pow(r107178, r107205);
        double r107207 = pow(r107200, r107205);
        double r107208 = r107206 / r107207;
        double r107209 = r107204 * r107208;
        double r107210 = r107203 - r107209;
        double r107211 = r107186 / r107206;
        double r107212 = r107188 * r107211;
        double r107213 = r107178 - r107212;
        double r107214 = r107192 / r107178;
        double r107215 = r107213 + r107214;
        double r107216 = r107178 + r107215;
        double r107217 = log(r107216);
        double r107218 = r107198 ? r107210 : r107217;
        double r107219 = r107180 ? r107196 : r107218;
        return r107219;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.2
Target45.1
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 < -1.0077278576112656

    1. Initial program 63.0

      \[\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.0625}{{x}^{5}} + \frac{1}{x} \cdot \left(\frac{0.125}{{x}^{2}} - 0.5\right)\right)}\]

    if -1.0077278576112656 < x < 0.882915536074428

    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}}}\]

    if 0.882915536074428 < x

    1. Initial program 32.2

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

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

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

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

Reproduce

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