Average Error: 37.5 → 16.1
Time: 34.6s
Precision: 64
Internal Precision: 128
\[\tan \left(x + \varepsilon\right) - \tan x\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le -2.388080272206088 \cdot 10^{-71}:\\ \;\;\;\;\frac{1}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon}} - \tan x\\ \mathbf{elif}\;\varepsilon \le 8.03573431146359 \cdot 10^{-62}:\\ \;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sin x \cdot \cos \varepsilon + \sin \varepsilon \cdot \cos x}{\cos x \cdot \cos \varepsilon}}{1 - \frac{\sin x}{\frac{\cos x \cdot \cos \varepsilon}{\sin \varepsilon}}} - \tan x\\ \end{array}\]

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.5
Target15.1
Herbie16.1
\[\frac{\sin \varepsilon}{\cos x \cdot \cos \left(x + \varepsilon\right)}\]

Derivation

  1. Split input into 3 regimes
  2. if eps < -2.388080272206088e-71

    1. Initial program 30.5

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

      \[\leadsto \color{blue}{\frac{\tan x + \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon}} - \tan x\]
    4. Using strategy rm
    5. Applied *-un-lft-identity5.6

      \[\leadsto \frac{\tan x + \color{blue}{1 \cdot \tan \varepsilon}}{1 - \tan x \cdot \tan \varepsilon} - \tan x\]
    6. Applied *-un-lft-identity5.6

      \[\leadsto \frac{\color{blue}{1 \cdot \tan x} + 1 \cdot \tan \varepsilon}{1 - \tan x \cdot \tan \varepsilon} - \tan x\]
    7. Applied distribute-lft-out5.6

      \[\leadsto \frac{\color{blue}{1 \cdot \left(\tan x + \tan \varepsilon\right)}}{1 - \tan x \cdot \tan \varepsilon} - \tan x\]
    8. Applied associate-/l*5.6

      \[\leadsto \color{blue}{\frac{1}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon}}} - \tan x\]

    if -2.388080272206088e-71 < eps < 8.03573431146359e-62

    1. Initial program 47.2

      \[\tan \left(x + \varepsilon\right) - \tan x\]
    2. Taylor expanded around 0 31.5

      \[\leadsto \color{blue}{x \cdot {\varepsilon}^{2} + \left(\varepsilon + {x}^{2} \cdot \varepsilon\right)}\]
    3. Simplified31.4

      \[\leadsto \color{blue}{\varepsilon + \left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right)}\]

    if 8.03573431146359e-62 < eps

    1. Initial program 31.4

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

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

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\sin x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}} - \tan x\]
    5. Using strategy rm
    6. Applied associate-/l*5.5

      \[\leadsto \frac{\tan x + \tan \varepsilon}{1 - \color{blue}{\frac{\sin x}{\frac{\cos x \cdot \cos \varepsilon}{\sin \varepsilon}}}} - \tan x\]
    7. Using strategy rm
    8. Applied tan-quot5.7

      \[\leadsto \frac{\tan x + \color{blue}{\frac{\sin \varepsilon}{\cos \varepsilon}}}{1 - \frac{\sin x}{\frac{\cos x \cdot \cos \varepsilon}{\sin \varepsilon}}} - \tan x\]
    9. Applied tan-quot5.7

      \[\leadsto \frac{\color{blue}{\frac{\sin x}{\cos x}} + \frac{\sin \varepsilon}{\cos \varepsilon}}{1 - \frac{\sin x}{\frac{\cos x \cdot \cos \varepsilon}{\sin \varepsilon}}} - \tan x\]
    10. Applied frac-add5.7

      \[\leadsto \frac{\color{blue}{\frac{\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon}{\cos x \cdot \cos \varepsilon}}}{1 - \frac{\sin x}{\frac{\cos x \cdot \cos \varepsilon}{\sin \varepsilon}}} - \tan x\]
  3. Recombined 3 regimes into one program.
  4. Final simplification16.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le -2.388080272206088 \cdot 10^{-71}:\\ \;\;\;\;\frac{1}{\frac{1 - \tan x \cdot \tan \varepsilon}{\tan x + \tan \varepsilon}} - \tan x\\ \mathbf{elif}\;\varepsilon \le 8.03573431146359 \cdot 10^{-62}:\\ \;\;\;\;\left(x \cdot \varepsilon\right) \cdot \left(\varepsilon + x\right) + \varepsilon\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sin x \cdot \cos \varepsilon + \sin \varepsilon \cdot \cos x}{\cos x \cdot \cos \varepsilon}}{1 - \frac{\sin x}{\frac{\cos x \cdot \cos \varepsilon}{\sin \varepsilon}}} - \tan x\\ \end{array}\]

Reproduce

herbie shell --seed 2019004 
(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: 33.1s)Debug log

sample452.0ms

Algorithm
intervals

simplify4.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

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

prune5.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 38.0b

localize16.0ms

Local error

Found 2 expressions with local error:

3.6b
(tan (+ x eps))
0.8b
(- (tan (+ x eps)) (tan x))

rewrite14.0ms

Algorithm
rewrite-expression-head
Counts
2 → 25
Calls

2 calls. Slowest were:

10.0ms
(- (tan (+ x eps)) (tan x))
3.0ms
(tan (+ x eps))

series191.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

97.0ms
(- (tan (+ x eps)) (tan x))
94.0ms
(tan (+ x eps))

simplify562.0ms

Counts
15 → 31
Calls

15 calls. Slowest were:

209.0ms
(- (* (+ (tan x) (tan eps)) (cos x)) (* (- 1 (* (tan x) (tan eps))) (sin x)))
153.0ms
(+ (* x (pow eps 2)) (+ eps (* (pow x 2) eps)))
90.0ms
(* (- 1 (* (tan x) (tan eps))) (cos x))

prune310.0ms

Pruning

9 alts after pruning (9 fresh and 0 done)

Merged error: 14.4b

localize16.0ms

Local error

Found 4 expressions with local error:

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

rewrite60.0ms

Algorithm
rewrite-expression-head
Counts
4 → 85
Calls

4 calls. Slowest were:

38.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps)))) (tan x))
12.0ms
(/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps))))
6.0ms
(+ (tan x) (tan eps))

series915.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

447.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps)))) (tan x))
240.0ms
(/ (+ (tan x) (tan eps)) (- 1 (* (tan x) (tan eps))))
136.0ms
(+ (tan x) (tan eps))
92.0ms
(* (tan x) (tan eps))

simplify3.1s

Counts
72 → 97
Calls

72 calls. Slowest were:

777.0ms
(/ (* (* (+ (tan x) (tan eps)) (+ (tan x) (tan eps))) (+ (tan x) (tan eps))) (* (* (- 1 (* (tan x) (tan eps))) (- 1 (* (tan x) (tan eps)))) (- 1 (* (tan x) (tan eps)))))
284.0ms
(+ (* 1/3 (* (pow x 3) eps)) (+ (* 1/3 (* x (pow eps 3))) (* x eps)))
265.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)))

prune1.2s

Pruning

20 alts after pruning (20 fresh and 0 done)

Merged error: 14.3b

localize42.0ms

Local error

Found 4 expressions with local error:

1.8b
(- (/ (+ (tan x) (tan eps)) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))) (tan x))
0.3b
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
0.2b
(* (sin x) (sin eps))
0.2b
(+ (tan x) (tan eps))

rewrite65.0ms

Algorithm
rewrite-expression-head
Counts
4 → 70
Calls

4 calls. Slowest were:

46.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))) (tan x))
8.0ms
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
6.0ms
(+ (tan x) (tan eps))

series692.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

422.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (/ (* (sin x) (sin eps)) (* (cos x) (cos eps))))) (tan x))
109.0ms
(/ (* (sin x) (sin eps)) (* (cos x) (cos eps)))
98.0ms
(+ (tan x) (tan eps))
63.0ms
(* (sin x) (sin eps))

simplify3.7s

Counts
46 → 82
Calls

46 calls. Slowest were:

289.0ms
(+ (* 1/3 (* (pow x 3) eps)) (+ (* 1/3 (* x (pow eps 3))) (* x eps)))
269.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)))
230.0ms
(/ (* (* (* (sin x) (sin x)) (sin x)) (* (* (sin eps) (sin eps)) (sin eps))) (* (* (* (cos x) (cos x)) (cos x)) (* (* (cos eps) (cos eps)) (cos eps))))

prune1.5s

Pruning

19 alts after pruning (19 fresh and 0 done)

Merged error: 14.3b

localize13.0ms

Local error

Found 4 expressions with local error:

1.8b
(- (/ (+ (tan x) (tan eps)) (- 1 (/ (sin x) (/ (* (cos x) (cos eps)) (sin eps))))) (tan x))
0.3b
(/ (sin x) (/ (* (cos x) (cos eps)) (sin eps)))
0.2b
(/ (* (cos x) (cos eps)) (sin eps))
0.2b
(+ (tan x) (tan eps))

rewrite83.0ms

Algorithm
rewrite-expression-head
Counts
4 → 99
Calls

4 calls. Slowest were:

65.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (/ (sin x) (/ (* (cos x) (cos eps)) (sin eps))))) (tan x))
7.0ms
(/ (* (cos x) (cos eps)) (sin eps))
6.0ms
(/ (sin x) (/ (* (cos x) (cos eps)) (sin eps)))

series806.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

475.0ms
(- (/ (+ (tan x) (tan eps)) (- 1 (/ (sin x) (/ (* (cos x) (cos eps)) (sin eps))))) (tan x))
126.0ms
(/ (sin x) (/ (* (cos x) (cos eps)) (sin eps)))
108.0ms
(+ (tan x) (tan eps))
97.0ms
(/ (* (cos x) (cos eps)) (sin eps))

simplify5.3s

Counts
97 → 111
Calls

97 calls. Slowest were:

502.0ms
(/ (* (* (* (cos x) (cos eps)) (* (cos x) (cos eps))) (* (cos x) (cos eps))) (* (* (sin eps) (sin eps)) (sin eps)))
464.0ms
(/ (* (* (* (cos x) (cos x)) (cos x)) (* (* (cos eps) (cos eps)) (cos eps))) (* (* (sin eps) (sin eps)) (sin eps)))
390.0ms
(* (- 1 (/ (sin x) (/ (* (cos x) (cos eps)) (sin eps)))) (cos x))

prune1.7s

Pruning

17 alts after pruning (17 fresh and 0 done)

Merged error: 14.3b

regimes302.0ms

Accuracy

87% (1.0b remaining)

Error of 16.1b against oracle of 15.1b and baseline of 22.6b

bsearch148.0ms

end0.0ms

sample11.9s

Algorithm
intervals