Average Error: 37.5 → 0.5
Time: 17.9s
Precision: 64
Internal Precision: 128
\[\sin \left(x + \varepsilon\right) - \sin x\]
\[\log \left(e^{(\left(\cos \varepsilon\right) \cdot \left(\sin x\right) + \left(-\sin x\right))_*}\right) + \cos x \cdot \sin \varepsilon\]

Error

Bits error versus x

Bits error versus eps

Target

Original37.5
Target15.3
Herbie0.5
\[2 \cdot \left(\cos \left(x + \frac{\varepsilon}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\]

Derivation

  1. Initial program 37.5

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

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

    \[\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 add-log-exp0.5

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

    \[\leadsto \log \left(e^{(\left(\cos \varepsilon\right) \cdot \left(\sin x\right) + \left(-\sin x\right))_*}\right) + \cos x \cdot \sin \varepsilon\]

Reproduce

herbie shell --seed 2018362 +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: 10.1s)Debug log

start203.0ms

Algorithm
intervals

setup24.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 36.9b

localize24.0ms

Local error

Found 2 expressions with local error:

3.1b
(sin (+ eps x))
2.0b
(- (sin (+ eps x)) (sin x))

rewrite15.0ms

Algorithm
rewrite-expression-head
Counts
2 → 40
Calls

2 calls. Slowest were:

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

series99.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

57.0ms
(- (sin (+ eps x)) (sin x))
42.0ms
(sin (+ eps x))

simplify764.0ms

Counts
33 → 46
Calls

33 calls. Slowest were:

342.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* x (pow eps 2)))))
52.0ms
(- (+ x eps) (* 1/6 (pow eps 3)))
38.0ms
(fma 1 (sin (+ eps x)) (- (* (sin x) 1)))

prune320.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.3b

localize33.0ms

Local error

Found 4 expressions with local error:

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

rewrite39.0ms

Algorithm
rewrite-expression-head
Counts
4 → 81
Calls

4 calls. Slowest were:

15.0ms
(+ (* (sin eps) (cos x)) (- (* (cos eps) (sin x)) (sin x)))
11.0ms
(* (cos eps) (sin x))
7.0ms
(- (* (cos eps) (sin x)) (sin x))

series288.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

120.0ms
(+ (* (sin eps) (cos x)) (- (* (cos eps) (sin x)) (sin x)))
69.0ms
(- (* (cos eps) (sin x)) (sin x))
57.0ms
(* (cos eps) (sin x))
42.0ms
(* (sin eps) (cos x))

simplify2.6s

Counts
52 → 93
Calls

52 calls. Slowest were:

529.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)))))
317.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* x (pow eps 2)))))
272.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* (pow x 2) eps))))

prune1.2s

Pruning

11 alts after pruning (11 fresh and 0 done)

Merged error: 0.1b

localize9.0ms

Local error

Found 3 expressions with local error:

2.4b
(- (* (sin x) (cos eps)) (sin x))
0.2b
(fma (cos x) (sin eps) (- (* (sin x) (cos eps)) (sin x)))
0.1b
(* (sin x) (cos eps))

rewrite11.0ms

Algorithm
rewrite-expression-head
Counts
3 → 48
Calls

3 calls. Slowest were:

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

series242.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

138.0ms
(fma (cos x) (sin eps) (- (* (sin x) (cos eps)) (sin x)))
53.0ms
(- (* (sin x) (cos eps)) (sin x))
51.0ms
(* (sin x) (cos eps))

simplify1.2s

Counts
26 → 57
Calls

26 calls. Slowest were:

507.0ms
(- eps (+ (* 1/2 (* x (pow eps 2))) (* 1/2 (* (pow x 2) eps))))
227.0ms
(- x (+ (* 1/2 (* x (pow eps 2))) (* 1/6 (pow x 3))))
91.0ms
(fma (sin x) (cos eps) (- (* (sin x) 1)))

prune710.0ms

Pruning

12 alts after pruning (12 fresh and 0 done)

Merged error: 0.1b

localize14.0ms

Local error

Found 3 expressions with local error:

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

rewrite11.0ms

Algorithm
rewrite-expression-head
Counts
3 → 45
Calls

3 calls. Slowest were:

6.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)))

series278.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

150.0ms
(+ (* (sin eps) (cos x)) (fma (cos eps) (sin x) (- (sin x))))
66.0ms
(* (sin eps) (cos x))
61.0ms
(fma (cos eps) (sin x) (- (sin x)))

simplify1.1s

Counts
21 → 54
Calls

21 calls. Slowest were:

662.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* x (pow eps 2)))))
190.0ms
(- eps (+ (* 1/6 (pow eps 3)) (* 1/2 (* (pow x 2) eps))))
104.0ms
(* (exp (* (sin eps) (cos x))) (exp (fma (cos eps) (sin x) (- (sin x)))))

prune631.0ms

Pruning

11 alts after pruning (11 fresh and 0 done)

Merged error: 0.1b

regimes257.0ms

Accuracy

0% (0.2b remaining)

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

bsearch3.0ms