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

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

\end{array}
double f(double x) {
        double r146489 = x;
        double r146490 = r146489 * r146489;
        double r146491 = 1.0;
        double r146492 = r146490 + r146491;
        double r146493 = sqrt(r146492);
        double r146494 = r146489 + r146493;
        double r146495 = log(r146494);
        return r146495;
}

double f(double x) {
        double r146496 = x;
        double r146497 = -1.0108746280769982;
        bool r146498 = r146496 <= r146497;
        double r146499 = 0.125;
        double r146500 = 3.0;
        double r146501 = pow(r146496, r146500);
        double r146502 = r146499 / r146501;
        double r146503 = 0.5;
        double r146504 = r146503 / r146496;
        double r146505 = 0.0625;
        double r146506 = 5.0;
        double r146507 = pow(r146496, r146506);
        double r146508 = r146505 / r146507;
        double r146509 = r146504 + r146508;
        double r146510 = r146502 - r146509;
        double r146511 = log(r146510);
        double r146512 = 0.8894030106629419;
        bool r146513 = r146496 <= r146512;
        double r146514 = 1.0;
        double r146515 = sqrt(r146514);
        double r146516 = log(r146515);
        double r146517 = r146496 / r146515;
        double r146518 = r146516 + r146517;
        double r146519 = 0.16666666666666666;
        double r146520 = pow(r146515, r146500);
        double r146521 = r146501 / r146520;
        double r146522 = r146519 * r146521;
        double r146523 = r146518 - r146522;
        double r146524 = 2.0;
        double r146525 = r146524 * r146496;
        double r146526 = r146525 + r146504;
        double r146527 = r146526 - r146502;
        double r146528 = log(r146527);
        double r146529 = r146513 ? r146523 : r146528;
        double r146530 = r146498 ? r146511 : r146529;
        return r146530;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original52.7
Target44.7
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.0108746280769982

    1. Initial program 62.7

      \[\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.0108746280769982 < x < 0.8894030106629419

    1. Initial program 58.5

      \[\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.8894030106629419 < x

    1. Initial program 31.0

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

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

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

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

Reproduce

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