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

\mathbf{elif}\;x \le 0.889403010662941917:\\
\;\;\;\;\mathsf{fma}\left(\frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}, \frac{-1}{6}, \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 r168948 = x;
        double r168949 = r168948 * r168948;
        double r168950 = 1.0;
        double r168951 = r168949 + r168950;
        double r168952 = sqrt(r168951);
        double r168953 = r168948 + r168952;
        double r168954 = log(r168953);
        return r168954;
}

double f(double x) {
        double r168955 = x;
        double r168956 = -1.0108746280769982;
        bool r168957 = r168955 <= r168956;
        double r168958 = 0.125;
        double r168959 = 3.0;
        double r168960 = pow(r168955, r168959);
        double r168961 = r168958 / r168960;
        double r168962 = 0.5;
        double r168963 = r168962 / r168955;
        double r168964 = r168961 - r168963;
        double r168965 = 0.0625;
        double r168966 = 5.0;
        double r168967 = pow(r168955, r168966);
        double r168968 = r168965 / r168967;
        double r168969 = r168964 - r168968;
        double r168970 = log(r168969);
        double r168971 = 0.8894030106629419;
        bool r168972 = r168955 <= r168971;
        double r168973 = 1.0;
        double r168974 = sqrt(r168973);
        double r168975 = pow(r168974, r168959);
        double r168976 = r168960 / r168975;
        double r168977 = -0.16666666666666666;
        double r168978 = log(r168974);
        double r168979 = r168955 / r168974;
        double r168980 = r168978 + r168979;
        double r168981 = fma(r168976, r168977, r168980);
        double r168982 = 2.0;
        double r168983 = r168963 - r168961;
        double r168984 = fma(r168955, r168982, r168983);
        double r168985 = log(r168984);
        double r168986 = r168972 ? r168981 : r168985;
        double r168987 = r168957 ? r168970 : r168986;
        return r168987;
}

Error

Bits error versus x

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. Simplified62.7

      \[\leadsto \color{blue}{\log \left(\sqrt{\mathsf{fma}\left(x, x, 1\right)} + x\right)}\]
    3. 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)}\]
    4. Simplified0.2

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

    if -1.0108746280769982 < x < 0.8894030106629419

    1. Initial program 58.5

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Simplified58.5

      \[\leadsto \color{blue}{\log \left(\sqrt{\mathsf{fma}\left(x, x, 1\right)} + x\right)}\]
    3. 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}}}\]
    4. Simplified0.3

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

    if 0.8894030106629419 < x

    1. Initial program 31.0

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Simplified31.0

      \[\leadsto \color{blue}{\log \left(\sqrt{\mathsf{fma}\left(x, x, 1\right)} + x\right)}\]
    3. 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)}\]
    4. 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.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.0108746280769982:\\ \;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 0.889403010662941917:\\ \;\;\;\;\mathsf{fma}\left(\frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}, \frac{-1}{6}, \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 2020043 +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)))))