Average Error: 29.2 → 0.1
Time: 14.4s
Precision: 64
\[\log \left(N + 1\right) - \log N\]
\[\begin{array}{l} \mathbf{if}\;N \le 4003.534651794603632879443466663360595703:\\ \;\;\;\;e^{\log \left(\log \left(N + 1\right)\right)} - \log N\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{{N}^{2}}, \frac{0.3333333333333333148296162562473909929395}{N} - 0.5, \frac{1}{N}\right)\\ \end{array}\]
\log \left(N + 1\right) - \log N
\begin{array}{l}
\mathbf{if}\;N \le 4003.534651794603632879443466663360595703:\\
\;\;\;\;e^{\log \left(\log \left(N + 1\right)\right)} - \log N\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{{N}^{2}}, \frac{0.3333333333333333148296162562473909929395}{N} - 0.5, \frac{1}{N}\right)\\

\end{array}
double f(double N) {
        double r33623 = N;
        double r33624 = 1.0;
        double r33625 = r33623 + r33624;
        double r33626 = log(r33625);
        double r33627 = log(r33623);
        double r33628 = r33626 - r33627;
        return r33628;
}

double f(double N) {
        double r33629 = N;
        double r33630 = 4003.5346517946036;
        bool r33631 = r33629 <= r33630;
        double r33632 = 1.0;
        double r33633 = r33629 + r33632;
        double r33634 = log(r33633);
        double r33635 = log(r33634);
        double r33636 = exp(r33635);
        double r33637 = log(r33629);
        double r33638 = r33636 - r33637;
        double r33639 = 1.0;
        double r33640 = 2.0;
        double r33641 = pow(r33629, r33640);
        double r33642 = r33639 / r33641;
        double r33643 = 0.3333333333333333;
        double r33644 = r33643 / r33629;
        double r33645 = 0.5;
        double r33646 = r33644 - r33645;
        double r33647 = r33632 / r33629;
        double r33648 = fma(r33642, r33646, r33647);
        double r33649 = r33631 ? r33638 : r33648;
        return r33649;
}

Error

Bits error versus N

Derivation

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

    1. Initial program 0.1

      \[\log \left(N + 1\right) - \log N\]
    2. Using strategy rm
    3. Applied add-exp-log0.1

      \[\leadsto \color{blue}{e^{\log \left(\log \left(N + 1\right)\right)}} - \log N\]

    if 4003.5346517946036 < N

    1. Initial program 59.4

      \[\log \left(N + 1\right) - \log N\]
    2. Taylor expanded around inf 0.0

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;N \le 4003.534651794603632879443466663360595703:\\ \;\;\;\;e^{\log \left(\log \left(N + 1\right)\right)} - \log N\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{{N}^{2}}, \frac{0.3333333333333333148296162562473909929395}{N} - 0.5, \frac{1}{N}\right)\\ \end{array}\]

Reproduce

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