Average Error: 29.2 → 0.1
Time: 10.7s
Precision: 64
Internal Precision: 128
\[\log \left(N + 1\right) - \log N\]
\[\begin{array}{l} \mathbf{if}\;N \le 8308.083087599556:\\ \;\;\;\;\log \left(\frac{1 + N}{N}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{N} - \frac{1}{N \cdot N} \cdot \left(\frac{1}{2} - \frac{\frac{1}{3}}{N}\right)\\ \end{array}\]

Error

Bits error versus N

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

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

    1. Initial program 0.1

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

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

    if 8308.083087599556 < N

    1. Initial program 59.4

      \[\log \left(N + 1\right) - \log N\]
    2. 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}}}\]
    3. Simplified0.0

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

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

Reproduce

herbie shell --seed 2019016 
(FPCore (N)
  :name "2log (problem 3.3.6)"
  (- (log (+ N 1)) (log N)))

Details

Time bar (total: 10.2s)Debug log

sample80.0ms

Algorithm
intervals
Results
573×(pre true 80)
316×(body nan 80)
137×(body real 80)
60×(body real 1280)
39×(body real 640)
13×(body real 320)
(body real 160)

simplify4.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
4.0ms
(- (log (+ N 1)) (log N))

prune5.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 28.1b

localize11.0ms

Local error

Found 2 expressions with local error:

3.0b
(log (+ N 1))
2.5b
(- (log (+ N 1)) (log N))

rewrite6.0ms

Algorithm
rewrite-expression-head
Rules
*-un-lft-identity
log-prod
add-sqr-sqrt
add-cube-cbrt
log-div
pow1
add-exp-log
associate--l+
add-log-exp
distribute-lft-out--
flip-+
log-pow
add-cbrt-cube
flip3-+
associate--l-
difference-of-squares
flip--
rem-log-exp
diff-log
flip3--
sub-neg
Counts
2 → 34
Calls
2 calls:
Slowest
5.0ms
(- (log (+ N 1)) (log N))
1.0ms
(log (+ N 1))

series108.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
81.0ms
(- (log (+ N 1)) (log N))
27.0ms
(log (+ N 1))

simplify818.0ms

Counts
22 → 40
Calls
22 calls:
Slowest
226.0ms
(- (+ (/ 1 N) (log -1)) (+ (* 1/2 (/ 1 (pow N 2))) (log (/ -1 N))))
133.0ms
(- (/ 1 N) (+ (* 1/2 (/ 1 (pow N 2))) (log (/ 1 N))))
127.0ms
(- (+ N (* 1/3 (pow N 3))) (* 1/2 (pow N 2)))
112.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))
96.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))

prune352.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.1b

localize5.0ms

Local error

Found 2 expressions with local error:

2.3b
(log (/ (+ N 1) N))
0.0b
(/ (+ N 1) N)

rewrite3.0ms

Algorithm
rewrite-expression-head
Rules
add-cube-cbrt
*-un-lft-identity
log-prod
add-sqr-sqrt
associate-/l*
add-exp-log
pow1
associate-/l/
add-log-exp
div-inv
add-cbrt-cube
flip-+
log-pow
rem-log-exp
flip3-+
frac-2neg
clear-num
log-div
Counts
2 → 29
Calls
2 calls:
Slowest
2.0ms
(/ (+ N 1) N)
1.0ms
(log (/ (+ N 1) N))

series66.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
46.0ms
(log (/ (+ N 1) N))
20.0ms
(/ (+ N 1) N)

simplify337.0ms

Counts
16 → 35
Calls
16 calls:
Slowest
153.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))
83.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))
51.0ms
(- N (+ (log N) (* 1/2 (pow N 2))))
12.0ms
(- (* N N) (* 1 1))
6.0ms
(+ (pow N 3) (pow 1 3))

prune212.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.0b

localize14.0ms

Local error

Found 4 expressions with local error:

2.4b
(log (cbrt (/ (+ N 1) N)))
2.3b
(log (* (cbrt (/ (+ N 1) N)) (cbrt (/ (+ N 1) N))))
0.3b
(cbrt (/ (+ N 1) N))
0.3b
(cbrt (/ (+ N 1) N))

rewrite13.0ms

Algorithm
rewrite-expression-head
Rules
12×cbrt-prod
11×pow1
log-pow
add-cube-cbrt
add-exp-log
*-un-lft-identity
log-prod
add-sqr-sqrt
pow1/3
cbrt-div
add-log-exp
add-cbrt-cube
log-div
div-inv
rem-log-exp
pow-prod-up
pow-prod-down
associate-*r/
prod-exp
associate-*l/
pow-plus
frac-times
pow2
Counts
4 → 64
Calls
4 calls:
Slowest
8.0ms
(log (* (cbrt (/ (+ N 1) N)) (cbrt (/ (+ N 1) N))))
1.0ms
(cbrt (/ (+ N 1) N))
1.0ms
(cbrt (/ (+ N 1) N))
1.0ms
(log (cbrt (/ (+ N 1) N)))

series322.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
113.0ms
(log (cbrt (/ (+ N 1) N)))
94.0ms
(log (* (cbrt (/ (+ N 1) N)) (cbrt (/ (+ N 1) N))))
59.0ms
(cbrt (/ (+ N 1) N))
56.0ms
(cbrt (/ (+ N 1) N))

simplify1.2s

Counts
40 → 76
Calls
40 calls:
Slowest
166.0ms
(- (+ (* (cbrt -1) (pow -1 1/3)) (* 1/3 (* (/ (cbrt -1) N) (pow -1 1/3)))) (* 1/9 (* (/ (cbrt -1) (pow N 2)) (pow -1 1/3))))
143.0ms
(- (+ (* 2/9 (/ 1 (pow N 3))) (* 2/3 (/ 1 N))) (* 1/3 (/ 1 (pow N 2))))
136.0ms
(- (+ (* (cbrt -1) (pow -1 1/3)) (* 1/3 (* (/ (cbrt -1) N) (pow -1 1/3)))) (* 1/9 (* (/ (cbrt -1) (pow N 2)) (pow -1 1/3))))
124.0ms
(- (+ (log (* (cbrt -1) (pow -1 1/3))) (* 1/3 (/ 1 N))) (* 1/6 (/ 1 (pow N 2))))
113.0ms
(- (+ (* 1/9 (/ 1 (pow N 3))) (* 1/3 (/ 1 N))) (* 1/6 (/ 1 (pow N 2))))

prune600.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.0b

localize8.0ms

Local error

Found 4 expressions with local error:

2.3b
(log (/ (+ N 1) N))
2.3b
(log (/ (+ N 1) N))
2.3b
(log (/ (+ N 1) N))
0.3b
(* (cbrt (log (/ (+ N 1) N))) (cbrt (log (/ (+ N 1) N))))

rewrite9.0ms

Algorithm
rewrite-expression-head
Rules
14×pow1
12×log-prod
11×add-cube-cbrt
11×*-un-lft-identity
11×add-sqr-sqrt
add-exp-log
cbrt-prod
associate-*l*
associate-*r*
log-pow
add-log-exp
pow1/3
add-cbrt-cube
div-inv
rem-log-exp
log-div
pow-prod-up
pow-prod-down
cbrt-unprod
*-commutative
prod-exp
pow-plus
pow2
Counts
4 → 72
Calls
4 calls:
Slowest
5.0ms
(* (cbrt (log (/ (+ N 1) N))) (cbrt (log (/ (+ N 1) N))))
1.0ms
(log (/ (+ N 1) N))
1.0ms
(log (/ (+ N 1) N))
1.0ms
(log (/ (+ N 1) N))

series221.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
98.0ms
(* (cbrt (log (/ (+ N 1) N))) (cbrt (log (/ (+ N 1) N))))
50.0ms
(log (/ (+ N 1) N))
38.0ms
(log (/ (+ N 1) N))
35.0ms
(log (/ (+ N 1) N))

simplify1.7s

Counts
52 → 84
Calls
52 calls:
Slowest
238.0ms
(- (+ (pow (pow (log N) 2) 1/3) (* 1/3 (* (pow N 2) (pow (/ 1 (log N)) 1/3)))) (+ (* 2/3 (* (pow (/ 1 (log N)) 1/3) N)) (* 1/9 (* (pow N 2) (pow (/ 1 (pow (log N) 4)) 1/3)))))
165.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))
136.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))
132.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))
129.0ms
(- (+ (* 1/3 (/ 1 (pow N 3))) (/ 1 N)) (* 1/2 (/ 1 (pow N 2))))

prune691.0ms

Pruning

4 alts after pruning (2 fresh and 2 done)

Merged error: 0.0b

regimes33.0ms

Accuracy

100% (0.0b remaining)

Error of 0.1b against oracle of 0.0b and baseline of 29.1b

bsearch45.0ms

end0.0ms

sample3.4s

Algorithm
intervals
Results
16094×(pre true 80)
8093×(body nan 80)
4114×(body real 80)
1765×(body real 1280)
1214×(body real 640)
612×(body real 320)
296×(body real 160)