Average Error: 15.2 → 0.4
Time: 6.9s
Precision: 64
Internal Precision: 128
\[\tan^{-1} \left(N + 1\right) - \tan^{-1} N\]
\[\tan^{-1}_* \frac{1}{(N \cdot \left(N + 1\right) + 1)_*}\]

Error

Bits error versus N

Target

Original15.2
Target0.4
Herbie0.4
\[\tan^{-1} \left(\frac{1}{1 + N \cdot \left(N + 1\right)}\right)\]

Derivation

  1. Initial program 15.2

    \[\tan^{-1} \left(N + 1\right) - \tan^{-1} N\]
  2. Using strategy rm
  3. Applied diff-atan14.0

    \[\leadsto \color{blue}{\tan^{-1}_* \frac{\left(N + 1\right) - N}{1 + \left(N + 1\right) \cdot N}}\]
  4. Simplified0.4

    \[\leadsto \tan^{-1}_* \frac{\color{blue}{1}}{1 + \left(N + 1\right) \cdot N}\]
  5. Simplified0.4

    \[\leadsto \tan^{-1}_* \frac{1}{\color{blue}{(N \cdot \left(N + 1\right) + 1)_*}}\]
  6. Final simplification0.4

    \[\leadsto \tan^{-1}_* \frac{1}{(N \cdot \left(N + 1\right) + 1)_*}\]

Reproduce

herbie shell --seed 2019002 +o rules:numerics
(FPCore (N)
  :name "2atan (example 3.5)"

  :herbie-target
  (atan (/ 1 (+ 1 (* N (+ N 1)))))

  (- (atan (+ N 1)) (atan N)))

Details

Time bar (total: 6.3s)Debug log

sample42.0ms

Algorithm
intervals

simplify8.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

8.0ms
(- (atan (+ N 1)) (atan N))

prune9.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 13.4b

localize38.0ms

Local error

Found 1 expressions with local error:

0.3b
(- (atan (+ N 1)) (atan N))

rewrite9.0ms

Algorithm
rewrite-expression-head
Counts
1 → 29
Calls

1 calls. Slowest were:

8.0ms
(- (atan (+ N 1)) (atan N))

series11.0ms

Counts
1 → 3
Calls

1 calls. Slowest were:

11.0ms
(- (atan (+ N 1)) (atan N))

simplify500.0ms

Counts
29 → 32
Calls

29 calls. Slowest were:

42.0ms
(fma (sqrt (atan (+ N 1))) (sqrt (atan (+ N 1))) (- (* (sqrt (atan N)) (sqrt (atan N)))))
38.0ms
(fma 1 (atan (+ N 1)) (- (* (atan N) 1)))
32.0ms
(fma (- (cbrt (atan N))) (* (cbrt (atan N)) (cbrt (atan N))) (* (cbrt (atan N)) (* (cbrt (atan N)) (cbrt (atan N)))))

prune244.0ms

Pruning

2 alts after pruning (1 fresh and 1 done)

Merged error: 0.4b

localize7.0ms

Local error

Found 2 expressions with local error:

0.4b
(atan2 1 (fma N (+ N 1) 1))
0.0b
(fma N (+ N 1) 1)

rewrite1.0ms

Algorithm
rewrite-expression-head
Counts
2 → 19
Calls

2 calls. Slowest were:

0.0ms
(atan2 1 (fma N (+ N 1) 1))
0.0ms
(fma N (+ N 1) 1)

series15.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

13.0ms
(fma N (+ N 1) 1)
2.0ms
(atan2 1 (fma N (+ N 1) 1))

simplify172.0ms

Counts
6 → 25
Calls

6 calls. Slowest were:

36.0ms
(+ N (+ (pow N 2) 1))
33.0ms
(+ N (+ (pow N 2) 1))
33.0ms
(+ N (+ (pow N 2) 1))

prune239.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 0.4b

localize22.0ms

Local error

Found 4 expressions with local error:

13.9b
(cbrt (fma N (+ N 1) 1))
13.9b
(cbrt (fma N (+ N 1) 1))
13.9b
(cbrt (fma N (+ N 1) 1))
0.4b
(atan2 1 (* (* (cbrt (fma N (+ N 1) 1)) (cbrt (fma N (+ N 1) 1))) (cbrt (fma N (+ N 1) 1))))

rewrite5.0ms

Algorithm
rewrite-expression-head
Counts
4 → 48
Calls

4 calls. Slowest were:

1.0ms
(cbrt (fma N (+ N 1) 1))
1.0ms
(cbrt (fma N (+ N 1) 1))
1.0ms
(cbrt (fma N (+ N 1) 1))

series158.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

60.0ms
(cbrt (fma N (+ N 1) 1))
56.0ms
(cbrt (fma N (+ N 1) 1))
40.0ms
(cbrt (fma N (+ N 1) 1))
2.0ms
(atan2 1 (* (* (cbrt (fma N (+ N 1) 1)) (cbrt (fma N (+ N 1) 1))) (cbrt (fma N (+ N 1) 1))))

simplify583.0ms

Counts
21 → 60
Calls

21 calls. Slowest were:

64.0ms
(+ (* 1/3 N) (+ (* 2/9 (pow N 2)) 1))
48.0ms
(+ (* 1/3 N) (+ (* 2/9 (pow N 2)) 1))
43.0ms
(+ (* 1/3 N) (+ (* 2/9 (pow N 2)) 1))

prune552.0ms

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 0.3b

localize12.0ms

Local error

Found 4 expressions with local error:

13.9b
(cbrt (fma N (+ N 1) 1))
13.9b
(cbrt (fma N (+ N 1) 1))
13.9b
(cbrt (fma N (+ N 1) 1))
13.9b
(cbrt (fma N (+ N 1) 1))

rewrite3.0ms

Algorithm
rewrite-expression-head
Counts
4 → 52
Calls

4 calls. Slowest were:

1.0ms
(cbrt (fma N (+ N 1) 1))
1.0ms
(cbrt (fma N (+ N 1) 1))
1.0ms
(cbrt (fma N (+ N 1) 1))

series232.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

61.0ms
(cbrt (fma N (+ N 1) 1))
57.0ms
(cbrt (fma N (+ N 1) 1))
57.0ms
(cbrt (fma N (+ N 1) 1))
56.0ms
(cbrt (fma N (+ N 1) 1))

simplify668.0ms

Counts
24 → 64
Calls

24 calls. Slowest were:

70.0ms
(+ (* 1/3 N) (+ (* 2/9 (pow N 2)) 1))
69.0ms
(+ (* 1/3 N) (+ (* 2/9 (pow N 2)) 1))
43.0ms
(+ (* 1/3 N) (+ (* 2/9 (pow N 2)) 1))

prune744.0ms

Pruning

7 alts after pruning (5 fresh and 2 done)

Merged error: 0.3b

regimes64.0ms

Accuracy

0% (0.0b remaining)

Error of 0.4b against oracle of 0.4b and baseline of 0.4b

bsearch1.0ms

end0.0ms

sample2.0s

Algorithm
intervals