Average Error: 53.2 → 0.3
Time: 6.2s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.0090202414523164:\\ \;\;\;\;\log \left(\mathsf{fma}\left(\frac{\frac{1}{8}}{{x}^{3}}, 1 \cdot 1, \left(-\frac{1}{2}\right) \cdot \frac{1}{x} - \frac{{1}^{3}}{\frac{{x}^{5}}{\frac{1}{16}}}\right)\right)\\ \mathbf{elif}\;x \le 0.963811647786171011:\\ \;\;\;\;\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 2 - \left(\left(\frac{0.09375}{{x}^{4}} - \log x\right) - \frac{\frac{0.25}{x}}{x}\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -1.0090202414523164:\\
\;\;\;\;\log \left(\mathsf{fma}\left(\frac{\frac{1}{8}}{{x}^{3}}, 1 \cdot 1, \left(-\frac{1}{2}\right) \cdot \frac{1}{x} - \frac{{1}^{3}}{\frac{{x}^{5}}{\frac{1}{16}}}\right)\right)\\

\mathbf{elif}\;x \le 0.963811647786171011:\\
\;\;\;\;\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 2 - \left(\left(\frac{0.09375}{{x}^{4}} - \log x\right) - \frac{\frac{0.25}{x}}{x}\right)\\

\end{array}
double f(double x) {
        double r189487 = x;
        double r189488 = r189487 * r189487;
        double r189489 = 1.0;
        double r189490 = r189488 + r189489;
        double r189491 = sqrt(r189490);
        double r189492 = r189487 + r189491;
        double r189493 = log(r189492);
        return r189493;
}

double f(double x) {
        double r189494 = x;
        double r189495 = -1.0090202414523164;
        bool r189496 = r189494 <= r189495;
        double r189497 = 0.125;
        double r189498 = 3.0;
        double r189499 = pow(r189494, r189498);
        double r189500 = r189497 / r189499;
        double r189501 = 1.0;
        double r189502 = r189501 * r189501;
        double r189503 = 0.5;
        double r189504 = -r189503;
        double r189505 = r189501 / r189494;
        double r189506 = r189504 * r189505;
        double r189507 = pow(r189501, r189498);
        double r189508 = 5.0;
        double r189509 = pow(r189494, r189508);
        double r189510 = 0.0625;
        double r189511 = r189509 / r189510;
        double r189512 = r189507 / r189511;
        double r189513 = r189506 - r189512;
        double r189514 = fma(r189500, r189502, r189513);
        double r189515 = log(r189514);
        double r189516 = 0.963811647786171;
        bool r189517 = r189494 <= r189516;
        double r189518 = sqrt(r189501);
        double r189519 = log(r189518);
        double r189520 = r189494 / r189518;
        double r189521 = r189519 + r189520;
        double r189522 = 0.16666666666666666;
        double r189523 = pow(r189518, r189498);
        double r189524 = r189499 / r189523;
        double r189525 = r189522 * r189524;
        double r189526 = r189521 - r189525;
        double r189527 = 2.0;
        double r189528 = log(r189527);
        double r189529 = 0.09375;
        double r189530 = 4.0;
        double r189531 = pow(r189494, r189530);
        double r189532 = r189529 / r189531;
        double r189533 = log(r189494);
        double r189534 = r189532 - r189533;
        double r189535 = 0.25;
        double r189536 = r189535 / r189494;
        double r189537 = r189536 / r189494;
        double r189538 = r189534 - r189537;
        double r189539 = r189528 - r189538;
        double r189540 = r189517 ? r189526 : r189539;
        double r189541 = r189496 ? r189515 : r189540;
        return r189541;
}

Error

Bits error versus x

Target

Original53.2
Target45.5
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.0090202414523164

    1. Initial program 62.9

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt62.9

      \[\leadsto \log \left(x + \sqrt{x \cdot x + \color{blue}{\sqrt{1} \cdot \sqrt{1}}}\right)\]
    4. Applied hypot-def62.9

      \[\leadsto \log \left(x + \color{blue}{\mathsf{hypot}\left(x, \sqrt{1}\right)}\right)\]
    5. Taylor expanded around -inf 0.2

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

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

    if -1.0090202414523164 < x < 0.963811647786171

    1. Initial program 58.7

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

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

    1. Initial program 32.3

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.0090202414523164:\\ \;\;\;\;\log \left(\mathsf{fma}\left(\frac{\frac{1}{8}}{{x}^{3}}, 1 \cdot 1, \left(-\frac{1}{2}\right) \cdot \frac{1}{x} - \frac{{1}^{3}}{\frac{{x}^{5}}{\frac{1}{16}}}\right)\right)\\ \mathbf{elif}\;x \le 0.963811647786171011:\\ \;\;\;\;\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 2 - \left(\left(\frac{0.09375}{{x}^{4}} - \log x\right) - \frac{\frac{0.25}{x}}{x}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020059 +o rules:numerics
(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)))))