Average Error: 29.8 → 0.1
Time: 15.9s
Precision: 64
\[\log \left(N + 1\right) - \log N\]
\[\begin{array}{l} \mathbf{if}\;N \le 7736.962487490932:\\ \;\;\;\;\log \left(\sqrt{\frac{1 + N}{N}}\right) + \log \left(\sqrt{\frac{1 + N}{N}}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\frac{1}{N}}{N}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{3}, \frac{\frac{1}{N}}{N \cdot N}, \frac{1}{N}\right)\right)\\ \end{array}\]
\log \left(N + 1\right) - \log N
\begin{array}{l}
\mathbf{if}\;N \le 7736.962487490932:\\
\;\;\;\;\log \left(\sqrt{\frac{1 + N}{N}}\right) + \log \left(\sqrt{\frac{1 + N}{N}}\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\frac{1}{N}}{N}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{3}, \frac{\frac{1}{N}}{N \cdot N}, \frac{1}{N}\right)\right)\\

\end{array}
double f(double N) {
        double r1663830 = N;
        double r1663831 = 1.0;
        double r1663832 = r1663830 + r1663831;
        double r1663833 = log(r1663832);
        double r1663834 = log(r1663830);
        double r1663835 = r1663833 - r1663834;
        return r1663835;
}

double f(double N) {
        double r1663836 = N;
        double r1663837 = 7736.962487490932;
        bool r1663838 = r1663836 <= r1663837;
        double r1663839 = 1.0;
        double r1663840 = r1663839 + r1663836;
        double r1663841 = r1663840 / r1663836;
        double r1663842 = sqrt(r1663841);
        double r1663843 = log(r1663842);
        double r1663844 = r1663843 + r1663843;
        double r1663845 = r1663839 / r1663836;
        double r1663846 = r1663845 / r1663836;
        double r1663847 = -0.5;
        double r1663848 = 0.3333333333333333;
        double r1663849 = r1663836 * r1663836;
        double r1663850 = r1663845 / r1663849;
        double r1663851 = fma(r1663848, r1663850, r1663845);
        double r1663852 = fma(r1663846, r1663847, r1663851);
        double r1663853 = r1663838 ? r1663844 : r1663852;
        return r1663853;
}

Error

Bits error versus N

Derivation

  1. Split input into 2 regimes
  2. if N < 7736.962487490932

    1. Initial program 0.1

      \[\log \left(N + 1\right) - \log N\]
    2. Simplified0.1

      \[\leadsto \color{blue}{\mathsf{log1p}\left(N\right) - \log N}\]
    3. Using strategy rm
    4. Applied log1p-udef0.1

      \[\leadsto \color{blue}{\log \left(1 + N\right)} - \log N\]
    5. Applied diff-log0.1

      \[\leadsto \color{blue}{\log \left(\frac{1 + N}{N}\right)}\]
    6. Using strategy rm
    7. Applied add-sqr-sqrt0.1

      \[\leadsto \log \color{blue}{\left(\sqrt{\frac{1 + N}{N}} \cdot \sqrt{\frac{1 + N}{N}}\right)}\]
    8. Applied log-prod0.1

      \[\leadsto \color{blue}{\log \left(\sqrt{\frac{1 + N}{N}}\right) + \log \left(\sqrt{\frac{1 + N}{N}}\right)}\]

    if 7736.962487490932 < N

    1. Initial program 59.3

      \[\log \left(N + 1\right) - \log N\]
    2. Simplified59.3

      \[\leadsto \color{blue}{\mathsf{log1p}\left(N\right) - \log N}\]
    3. Taylor expanded around inf 0.0

      \[\leadsto \color{blue}{\left(\frac{1}{3} \cdot \frac{1}{{N}^{3}} + \frac{1}{N}\right) - \frac{1}{2} \cdot \frac{1}{{N}^{2}}}\]
    4. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\frac{1}{N}}{N}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{3}, \frac{\frac{1}{N}}{N \cdot N}, \frac{1}{N}\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;N \le 7736.962487490932:\\ \;\;\;\;\log \left(\sqrt{\frac{1 + N}{N}}\right) + \log \left(\sqrt{\frac{1 + N}{N}}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{\frac{1}{N}}{N}, \frac{-1}{2}, \mathsf{fma}\left(\frac{1}{3}, \frac{\frac{1}{N}}{N \cdot N}, \frac{1}{N}\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019135 +o rules:numerics
(FPCore (N)
  :name "2log (problem 3.3.6)"
  (- (log (+ N 1)) (log N)))