Average Error: 37.0 → 13.0
Time: 3.5m
Precision: 64
Internal Precision: 128
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin x}{\cos \varepsilon} \cdot \frac{\sin \varepsilon}{\cos x}} - \frac{\sin x}{\cos x}\right) + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}}\]

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original37.0
Target15.1
Herbie13.0
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

  1. Initial program 37.0

    \[\tan \left(x + \varepsilon\right) - \tan x\]
  2. Using strategy rm
  3. Applied tan-sum21.8

    \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
  4. Taylor expanded around inf 21.9

    \[\leadsto \color{blue}{\left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} + \frac{\sin x}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}\right) - \frac{\sin x}{\cos x}}\]
  5. Using strategy rm
  6. Applied div-inv22.0

    \[\leadsto \left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} + \frac{\sin x}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}\right) - \color{blue}{\sin x \cdot \frac{1}{\cos x}}\]
  7. Applied *-un-lft-identity22.0

    \[\leadsto \left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} + \color{blue}{1 \cdot \frac{\sin x}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}}\right) - \sin x \cdot \frac{1}{\cos x}\]
  8. Applied *-un-lft-identity22.0

    \[\leadsto \left(\color{blue}{1 \cdot \frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}} + 1 \cdot \frac{\sin x}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}\right) - \sin x \cdot \frac{1}{\cos x}\]
  9. Applied distribute-lft-out22.0

    \[\leadsto \color{blue}{1 \cdot \left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} + \frac{\sin x}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}\right)} - \sin x \cdot \frac{1}{\cos x}\]
  10. Applied prod-diff22.2

    \[\leadsto \color{blue}{(1 \cdot \left(\frac{\sin \varepsilon}{\cos \varepsilon \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)} + \frac{\sin x}{\cos x \cdot \left(1 - \frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}\right)}\right) + \left(-\frac{1}{\cos x} \cdot \sin x\right))_* + (\left(-\frac{1}{\cos x}\right) \cdot \left(\sin x\right) + \left(\frac{1}{\cos x} \cdot \sin x\right))_*}\]
  11. Simplified15.7

    \[\leadsto \color{blue}{\left(\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin \varepsilon}{\cos x} \cdot \frac{\sin x}{\cos \varepsilon}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon}{\cos x} \cdot \frac{\sin x}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right)\right)} + (\left(-\frac{1}{\cos x}\right) \cdot \left(\sin x\right) + \left(\frac{1}{\cos x} \cdot \sin x\right))_*\]
  12. Simplified13.0

    \[\leadsto \left(\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin \varepsilon}{\cos x} \cdot \frac{\sin x}{\cos \varepsilon}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon}{\cos x} \cdot \frac{\sin x}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right)\right) + \color{blue}{0}\]
  13. Using strategy rm
  14. Applied associate-*r/13.0

    \[\leadsto \left(\frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \color{blue}{\frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}}} + \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin \varepsilon}{\cos x} \cdot \frac{\sin x}{\cos \varepsilon}} - \frac{\sin x}{\cos x}\right)\right) + 0\]
  15. Final simplification13.0

    \[\leadsto \left(\frac{\frac{\sin x}{\cos x}}{1 - \frac{\sin x}{\cos \varepsilon} \cdot \frac{\sin \varepsilon}{\cos x}} - \frac{\sin x}{\cos x}\right) + \frac{\frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\frac{\sin \varepsilon}{\cos x} \cdot \sin x}{\cos \varepsilon}}\]

Reproduce

herbie shell --seed 2019007 +o rules:numerics
(FPCore (x eps)
  :name "2tan (problem 3.3.2)"

  :herbie-target
  (/ (sin eps) (* (cos x) (cos (+ x eps))))

  (- (tan (+ x eps)) (tan x)))

Details

Time bar (total: 3.5m)Debug log

sample470.0ms

Algorithm
intervals

simplify8.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

8.0ms
(- (tan (+ x eps)) (tan x))

prune10.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 36.2b

localize16.0ms

Local error

Found 2 expressions with local error:

4.6b
(tan (+ x eps))
1.2b
(- (tan (+ x eps)) (tan x))

rewrite8.0ms

Algorithm
rewrite-expression-head
Counts
2 → 41
Calls

2 calls. Slowest were:

6.0ms
(- (tan (+ x eps)) (tan x))
2.0ms
(tan (+ x eps))

series195.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

121.0ms
(- (tan (+ x eps)) (tan x))
74.0ms
(tan (+ x eps))

simplify1.1s

Counts
35 → 47
Calls

35 calls. Slowest were:

233.0ms
(+ (* x (pow eps 2)) (+ eps (* (pow x 2) eps)))
213.0ms
(- (* (+ (tan x) (tan eps)) (cos x)) (* (- 1 (* (tan x) (tan eps))) (sin x)))
153.0ms
(* (- 1 (* (tan x) (tan eps))) (cos x))

prune491.0ms

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 14.9b

localize28.0ms

Local error

Found 4 expressions with local error:

2.9b
(- (/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps)))) (tan x))
0.2b
(* (tan x) (tan eps))
0.1b
(/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps))))
0.1b
(+ (tan x) (tan eps))

rewrite72.0ms

Algorithm
rewrite-expression-head
Counts
4 → 168
Calls

4 calls. Slowest were:

46.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps)))) (tan x))
13.0ms
(/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps))))
4.0ms
(* (tan x) (tan eps))

series855.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

391.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps)))) (tan x))
254.0ms
(/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps))))
106.0ms
(* (tan x) (tan eps))
103.0ms
(+ (tan x) (tan eps))

simplify14.5s

Counts
199 → 180
Calls

199 calls. Slowest were:

590.0ms
(fma (/ 1 (* (cbrt (- 1 (* (tan x) (tan eps)))) (cbrt (- 1 (* (tan x) (tan eps)))))) (/ (+ (tan x) (tan eps)) (cbrt (- 1 (* (tan x) (tan eps))))) (- (* (sqrt (tan x)) (sqrt (tan x)))))
540.0ms
(fma (/ 1 (* (cbrt (- 1 (* (tan x) (tan eps)))) (cbrt (- 1 (* (tan x) (tan eps)))))) (/ (+ (tan x) (tan eps)) (cbrt (- 1 (* (tan x) (tan eps))))) (- (* (sqrt (tan x)) (sqrt (tan x)))))
459.0ms
(fma (/ 1 (* (cbrt (- 1 (* (tan x) (tan eps)))) (cbrt (- 1 (* (tan x) (tan eps)))))) (/ (+ (tan x) (tan eps)) (cbrt (- 1 (* (tan x) (tan eps))))) (- (* (tan x) 1)))

prune2.1s

Pruning

15 alts after pruning (15 fresh and 0 done)

Merged error: 14.8b

localize89.0ms

Local error

Found 4 expressions with local error:

2.9b
(- (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))))) (/ (sin x) (cos x)))
0.2b
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
0.2b
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
0.2b
(* (sin x) (sin eps))

rewrite340.0ms

Algorithm
rewrite-expression-head
Counts
4 → 177
Calls

4 calls. Slowest were:

300.0ms
(- (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))))) (/ (sin x) (cos x)))
16.0ms
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
16.0ms
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))

series774.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

455.0ms
(- (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))))) (/ (sin x) (cos x)))
133.0ms
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
113.0ms
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
73.0ms
(* (sin x) (sin eps))

simplify29.7s

Counts
222 → 189
Calls

222 calls. Slowest were:

743.0ms
(fma (* (cbrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))))) (cbrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))))))) (cbrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))))) (- (* (/ (cbrt (sin x)) (cos x)) (/ (* (cbrt (sin x)) (cbrt (sin x))) 1))))
602.0ms
(fma (sqrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))))) (sqrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))))) (- (* (/ (cbrt (sin x)) (cos x)) (/ (* (cbrt (sin x)) (cbrt (sin x))) 1))))
502.0ms
(fma (sqrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))))) (sqrt (+ (/ (sin eps) (* (cos eps) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))) (/ (sin x) (* (cos x) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))))))) (- (* (/ 1 (cos x)) (sin x))))

prune1.9s

Pruning

10 alts after pruning (10 fresh and 0 done)

Merged error: 12.9b

localize31.0ms

Local error

Found 4 expressions with local error:

4.5b
(- (/ (/ (sin x) (cos x)) (- 1 (* (/ (sin eps) (cos x)) (/ (sin x) (cos eps))))) (/ (sin x) (cos x)))
0.3b
(* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))
0.3b
(* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))
0.2b
(/ (sin eps) (cos eps))

rewrite68.0ms

Algorithm
rewrite-expression-head
Counts
4 → 779
Calls

4 calls. Slowest were:

23.0ms
(- (/ (/ (sin x) (cos x)) (- 1 (* (/ (sin eps) (cos x)) (/ (sin x) (cos eps))))) (/ (sin x) (cos x)))
8.0ms
(* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))
8.0ms
(* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))

series380.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

195.0ms
(- (/ (/ (sin x) (cos x)) (- 1 (* (/ (sin eps) (cos x)) (/ (sin x) (cos eps))))) (/ (sin x) (cos x)))
83.0ms
(* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))
82.0ms
(* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))
19.0ms
(/ (sin eps) (cos eps))

simplify2.3m

Counts
1345 → 791
Calls

1345 calls. Slowest were:

557.0ms
(fma (sqrt (/ (/ (sin x) (cos x)) (- 1 (* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))))) (sqrt (/ (/ (sin x) (cos x)) (- 1 (* (/ (sin eps) (cos x)) (/ (sin x) (cos eps)))))) (- (* (/ 1 (cos x)) (sin x))))
451.0ms
(fma (- (/ (sin x) (cbrt (cos x)))) (/ 1 (* (cbrt (cos x)) (cbrt (cos x)))) (* (/ (sin x) (cbrt (cos x))) (/ 1 (* (cbrt (cos x)) (cbrt (cos x))))))
431.0ms
(fma (/ (sqrt (/ (sin x) (cos x))) 1) (/ (sqrt (/ (sin x) (cos x))) (- 1 (* (/ (sin eps) (cos x)) (/ (sin x) (cos eps))))) (- (* (/ (sin x) (cos x)) (/ 1 1))))

prune9.4s

Pruning

18 alts after pruning (18 fresh and 0 done)

Merged error: 12.8b

regimes226.0ms

Accuracy

0% (0.4b remaining)

Error of 13.0b against oracle of 12.6b and baseline of 13.0b

bsearch2.0ms

end0.0ms

sample10.2s

Algorithm
intervals