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

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

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

\end{array}
double f(double x) {
        double r157749 = x;
        double r157750 = r157749 * r157749;
        double r157751 = 1.0;
        double r157752 = r157750 + r157751;
        double r157753 = sqrt(r157752);
        double r157754 = r157749 + r157753;
        double r157755 = log(r157754);
        return r157755;
}

double f(double x) {
        double r157756 = x;
        double r157757 = -0.994187787075435;
        bool r157758 = r157756 <= r157757;
        double r157759 = 0.125;
        double r157760 = 3.0;
        double r157761 = pow(r157756, r157760);
        double r157762 = r157759 / r157761;
        double r157763 = 0.5;
        double r157764 = r157763 / r157756;
        double r157765 = r157762 - r157764;
        double r157766 = 0.0625;
        double r157767 = 5.0;
        double r157768 = pow(r157756, r157767);
        double r157769 = r157766 / r157768;
        double r157770 = r157765 - r157769;
        double r157771 = log(r157770);
        double r157772 = 0.9042263775546854;
        bool r157773 = r157756 <= r157772;
        double r157774 = -0.16666666666666666;
        double r157775 = 1.0;
        double r157776 = sqrt(r157775);
        double r157777 = pow(r157776, r157760);
        double r157778 = r157761 / r157777;
        double r157779 = log(r157776);
        double r157780 = r157756 / r157776;
        double r157781 = r157779 + r157780;
        double r157782 = fma(r157774, r157778, r157781);
        double r157783 = 2.0;
        double r157784 = r157764 - r157762;
        double r157785 = fma(r157756, r157783, r157784);
        double r157786 = log(r157785);
        double r157787 = r157773 ? r157782 : r157786;
        double r157788 = r157758 ? r157771 : r157787;
        return r157788;
}

Error

Bits error versus x

Target

Original53.1
Target45.6
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 < -0.994187787075435

    1. Initial program 62.7

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

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

      \[\leadsto \log \color{blue}{\left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)}\]

    if -0.994187787075435 < x < 0.9042263775546854

    1. Initial program 58.6

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

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

    if 0.9042263775546854 < x

    1. Initial program 33.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(\mathsf{fma}\left(x, 2, \frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.3

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

Reproduce

herbie shell --seed 2019212 +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)))))