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

\mathbf{elif}\;x \le 0.00100879714941640706:\\
\;\;\;\;\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 + \sqrt{1} \cdot \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\

\end{array}
double f(double x) {
        double r193783 = x;
        double r193784 = r193783 * r193783;
        double r193785 = 1.0;
        double r193786 = r193784 + r193785;
        double r193787 = sqrt(r193786);
        double r193788 = r193783 + r193787;
        double r193789 = log(r193788);
        return r193789;
}

double f(double x) {
        double r193790 = x;
        double r193791 = -1.0202654642914022;
        bool r193792 = r193790 <= r193791;
        double r193793 = 0.125;
        double r193794 = 3.0;
        double r193795 = pow(r193790, r193794);
        double r193796 = r193793 / r193795;
        double r193797 = 0.5;
        double r193798 = r193797 / r193790;
        double r193799 = 0.0625;
        double r193800 = -r193799;
        double r193801 = 5.0;
        double r193802 = pow(r193790, r193801);
        double r193803 = r193800 / r193802;
        double r193804 = r193798 - r193803;
        double r193805 = r193796 - r193804;
        double r193806 = log(r193805);
        double r193807 = 0.001008797149416407;
        bool r193808 = r193790 <= r193807;
        double r193809 = 1.0;
        double r193810 = sqrt(r193809);
        double r193811 = log(r193810);
        double r193812 = r193790 / r193810;
        double r193813 = r193811 + r193812;
        double r193814 = 0.16666666666666666;
        double r193815 = pow(r193810, r193794);
        double r193816 = r193795 / r193815;
        double r193817 = r193814 * r193816;
        double r193818 = r193813 - r193817;
        double r193819 = 1.0;
        double r193820 = sqrt(r193819);
        double r193821 = hypot(r193790, r193810);
        double r193822 = r193820 * r193821;
        double r193823 = r193790 + r193822;
        double r193824 = log(r193823);
        double r193825 = r193808 ? r193818 : r193824;
        double r193826 = r193792 ? r193806 : r193825;
        return r193826;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.2
Target45.4
Herbie0.1
\[\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.0202654642914022

    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.0202654642914022 < x < 0.001008797149416407

    1. Initial program 59.1

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

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

    1. Initial program 31.7

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Using strategy rm
    3. Applied *-un-lft-identity31.7

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

      \[\leadsto \log \left(x + \color{blue}{\sqrt{1} \cdot \sqrt{x \cdot x + 1}}\right)\]
    5. Simplified0.1

      \[\leadsto \log \left(x + \sqrt{1} \cdot \color{blue}{\mathsf{hypot}\left(x, \sqrt{1}\right)}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.1

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

Reproduce

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