Average Error: 37.1 → 0.4
Time: 18.2s
Precision: 64
Internal Precision: 128
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[(\left(\sin \varepsilon\right) \cdot \left(\cos x\right) + \left((\left(\cos \varepsilon\right) \cdot \left(\sin x\right) + \left(-\sin x\right))_*\right))_*\]

Error

Bits error versus x

Bits error versus eps

Target

Original37.1
Target14.7
Herbie0.4
\[2 \cdot \left(\cos \left(x + \frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\]

Derivation

  1. Initial program 37.1

    \[\sin \left(x + \varepsilon\right) - \sin x\]
  2. Initial simplification37.1

    \[\leadsto \sin \left(\varepsilon + x\right) - \sin x\]
  3. Using strategy rm
  4. Applied sin-sum22.3

    \[\leadsto \color{blue}{\left(\sin \varepsilon \cdot \cos x + \cos \varepsilon \cdot \sin x\right)} - \sin x\]
  5. Applied associate--l+0.4

    \[\leadsto \color{blue}{\sin \varepsilon \cdot \cos x + \left(\cos \varepsilon \cdot \sin x - \sin x\right)}\]
  6. Using strategy rm
  7. Applied fma-neg0.4

    \[\leadsto \sin \varepsilon \cdot \cos x + \color{blue}{(\left(\cos \varepsilon\right) \cdot \left(\sin x\right) + \left(-\sin x\right))_*}\]
  8. Using strategy rm
  9. Applied fma-def0.4

    \[\leadsto \color{blue}{(\left(\sin \varepsilon\right) \cdot \left(\cos x\right) + \left((\left(\cos \varepsilon\right) \cdot \left(\sin x\right) + \left(-\sin x\right))_*\right))_*}\]
  10. Final simplification0.4

    \[\leadsto (\left(\sin \varepsilon\right) \cdot \left(\cos x\right) + \left((\left(\cos \varepsilon\right) \cdot \left(\sin x\right) + \left(-\sin x\right))_*\right))_*\]

Reproduce

herbie shell --seed 2018360 +o rules:numerics
(FPCore (x eps)
  :name "2sin (example 3.3)"

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

  (- (sin (+ x eps)) (sin x)))

Details

Time bar (total: 8.8s)Debug log

start176.0ms

Algorithm
intervals

setup21.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 33.6b

localize23.0ms

Local error

Found 2 expressions with local error:

3.4b
(sin (+ eps x))
1.2b
(- (sin (+ eps x)) (sin x))

rewrite37.0ms

Algorithm
rewrite-expression-head
Counts
2 → 40
Calls

2 calls. Slowest were:

33.0ms
(- (sin (+ eps x)) (sin x))
3.0ms
(sin (+ eps x))

series75.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

46.0ms
(- (sin (+ eps x)) (sin x))
29.0ms
(sin (+ eps x))

simplify687.0ms

Counts
33 → 46
Calls

33 calls. Slowest were:

253.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* x (pow eps 2)))))
50.0ms
(- (+ x eps) (* 1/6 (pow eps 3)))
29.0ms
(fma (sqrt (sin (+ eps x))) (sqrt (sin (+ eps x))) (- (* (sqrt (sin x)) (sqrt (sin x)))))

prune421.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.3b

localize20.0ms

Local error

Found 4 expressions with local error:

2.5b
(- (* (cos eps) (sin x)) (sin x))
0.1b
(* (sin eps) (cos x))
0.1b
(* (cos eps) (sin x))
0.1b
(+ (* (sin eps) (cos x)) (- (* (cos eps) (sin x)) (sin x)))

rewrite32.0ms

Algorithm
rewrite-expression-head
Counts
4 → 81
Calls

4 calls. Slowest were:

17.0ms
(+ (* (sin eps) (cos x)) (- (* (cos eps) (sin x)) (sin x)))
6.0ms
(- (* (cos eps) (sin x)) (sin x))
4.0ms
(* (cos eps) (sin x))

series308.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

122.0ms
(+ (* (sin eps) (cos x)) (- (* (cos eps) (sin x)) (sin x)))
83.0ms
(- (* (cos eps) (sin x)) (sin x))
62.0ms
(* (cos eps) (sin x))
41.0ms
(* (sin eps) (cos x))

simplify2.7s

Counts
52 → 93
Calls

52 calls. Slowest were:

509.0ms
(+ (* (+ (sin (- eps x)) (sin (+ eps x))) (+ (* (cos eps) (sin x)) (sin x))) (* 2 (- (* (* (cos eps) (sin x)) (* (cos eps) (sin x))) (* (sin x) (sin x)))))
392.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* (pow x 2) eps))))
385.0ms
(- x (+ (* 1/6 (pow x 3)) (* 1/2 (* x (pow eps 2)))))

prune1.3s

Pruning

14 alts after pruning (14 fresh and 0 done)

Merged error: 0.1b

localize8.0ms

Local error

Found 3 expressions with local error:

2.5b
(fma (cos eps) (sin x) (- (sin x)))
0.1b
(* (sin eps) (cos x))
0.1b
(+ (* (sin eps) (cos x)) (fma (cos eps) (sin x) (- (sin x))))

rewrite11.0ms

Algorithm
rewrite-expression-head
Counts
3 → 45
Calls

3 calls. Slowest were:

7.0ms
(+ (* (sin eps) (cos x)) (fma (cos eps) (sin x) (- (sin x))))
4.0ms
(* (sin eps) (cos x))
0.0ms
(fma (cos eps) (sin x) (- (sin x)))

series280.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

154.0ms
(+ (* (sin eps) (cos x)) (fma (cos eps) (sin x) (- (sin x))))
77.0ms
(fma (cos eps) (sin x) (- (sin x)))
49.0ms
(* (sin eps) (cos x))

simplify860.0ms

Counts
21 → 54
Calls

21 calls. Slowest were:

359.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* (pow x 2) eps))))
240.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* x (pow eps 2)))))
84.0ms
(* (exp (* (sin eps) (cos x))) (exp (fma (cos eps) (sin x) (- (sin x)))))

prune701.0ms

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 0.1b

localize8.0ms

Local error

Found 2 expressions with local error:

2.5b
(fma (cos eps) (sin x) (- (sin x)))
0.2b
(fma (sin eps) (cos x) (fma (cos eps) (sin x) (- (sin x))))

rewrite1.0ms

Algorithm
rewrite-expression-head
Counts
2 → 20
Calls

2 calls. Slowest were:

0.0ms
(fma (cos eps) (sin x) (- (sin x)))
0.0ms
(fma (sin eps) (cos x) (fma (cos eps) (sin x) (- (sin x))))

series234.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

142.0ms
(fma (sin eps) (cos x) (fma (cos eps) (sin x) (- (sin x))))
92.0ms
(fma (cos eps) (sin x) (- (sin x)))

simplify305.0ms

Counts
6 → 26
Calls

6 calls. Slowest were:

200.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* x (pow eps 2)))))
62.0ms
(- (+ (* (cos x) (sin eps)) (* (sin x) (cos eps))) (sin x))
32.0ms
(- (+ (* (cos x) (sin eps)) (* (sin x) (cos eps))) (sin x))

prune393.0ms

Pruning

12 alts after pruning (11 fresh and 1 done)

Merged error: 0.1b

regimes196.0ms

Accuracy

0% (0.1b remaining)

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

bsearch1.0ms