Average Error: 29.9 → 0.6
Time: 25.0s
Precision: 64
Internal Precision: 128
\[\left(e^{x} - 2\right) + e^{-x}\]
\[(\frac{1}{12} \cdot \left({x}^{4}\right) + \left((\frac{1}{360} \cdot \left({x}^{6}\right) + \left(x \cdot x\right))_*\right))_*\]

Error

Bits error versus x

Target

Original29.9
Target0.0
Herbie0.6
\[4 \cdot {\left(\sinh \left(\frac{x}{2}\right)\right)}^{2}\]

Derivation

  1. Initial program 29.9

    \[\left(e^{x} - 2\right) + e^{-x}\]
  2. Taylor expanded around 0 0.6

    \[\leadsto \color{blue}{{x}^{2} + \left(\frac{1}{12} \cdot {x}^{4} + \frac{1}{360} \cdot {x}^{6}\right)}\]
  3. Simplified0.6

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

    \[\leadsto (\frac{1}{12} \cdot \left({x}^{4}\right) + \left((\frac{1}{360} \cdot \left({x}^{6}\right) + \left(x \cdot x\right))_*\right))_*\]

Reproduce

herbie shell --seed 2019016 +o rules:numerics
(FPCore (x)
  :name "exp2 (problem 3.3.7)"

  :herbie-target
  (* 4 (pow (sinh (/ x 2)) 2))

  (+ (- (exp x) 2) (exp (- x))))

Details

Time bar (total: 24.4s)Debug log

sample196.0ms

Algorithm
intervals
Results
525×(pre true 80)
273×(body real 80)
177×(body real 1280)
43×(body real 640)
23×(body real 320)
(body real 160)

simplify27.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
27.0ms
(+ (- (exp x) 2) (exp (- x)))

prune9.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 30.0b

localize26.0ms

Local error

Found 2 expressions with local error:

2.4b
(+ (- (exp x) 2) (exp (- x)))
0.0b
(- (exp x) 2)

rewrite35.0ms

Algorithm
rewrite-expression-head
Rules
*-un-lft-identity
add-log-exp
add-cube-cbrt
frac-add
add-sqr-sqrt
flip--
fma-neg
flip3--
fma-def
log1p-expm1-u
add-exp-log
exp-diff
add-cbrt-cube
sub-neg
associate-+l+
pow1
expm1-log1p-u
exp-neg
neg-sub0
distribute-lft-out
flip-+
associate-+l-
flip3-+
sum-log
+-commutative
Counts
2 → 40
Calls
2 calls:
Slowest
28.0ms
(+ (- (exp x) 2) (exp (- x)))
6.0ms
(- (exp x) 2)

series112.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
98.0ms
(+ (- (exp x) 2) (exp (- x)))
14.0ms
(- (exp x) 2)

simplify1.7s

Counts
23 → 46
Calls
23 calls:
Slowest
470.0ms
(+ (* (- (pow (exp x) 3) (pow 2 3)) (exp x)) (* (+ (* (exp x) (exp x)) (+ (* 2 2) (* (exp x) 2))) (exp 0)))
265.0ms
(+ (* (- (* (exp x) (exp x)) (* 2 2)) (exp x)) (* (+ (exp x) 2) (exp 0)))
251.0ms
(+ (* (- (pow (exp x) 3) (pow 2 3)) (exp x)) (* (+ (* (exp x) (exp x)) (+ (* 2 2) (* (exp x) 2))) 1))
216.0ms
(+ (* (- (* (exp x) (exp x)) (* 2 2)) (exp x)) (* (+ (exp x) 2) 1))
121.0ms
(* (+ (* (exp x) (exp x)) (+ (* 2 2) (* (exp x) 2))) (exp x))

prune387.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.0b

localize22.0ms

Local error

Found 2 expressions with local error:

0.0b
(fma 1/12 (pow x 4) (fma 1/360 (pow x 6) (* x x)))
0.0b
(fma 1/360 (pow x 6) (* x x))

rewrite1.0ms

Algorithm
rewrite-expression-head
Rules
add-log-exp
log1p-expm1-u
fma-udef
add-cube-cbrt
add-exp-log
add-cbrt-cube
*-un-lft-identity
pow1
expm1-log1p-u
add-sqr-sqrt
Counts
2 → 20
Calls
2 calls:
Slowest
0.0ms
(fma 1/12 (pow x 4) (fma 1/360 (pow x 6) (* x x)))
0.0ms
(fma 1/360 (pow x 6) (* x x))

series75.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
48.0ms
(fma 1/360 (pow x 6) (* x x))
27.0ms
(fma 1/12 (pow x 4) (fma 1/360 (pow x 6) (* x x)))

simplify112.0ms

Counts
6 → 26
Calls
6 calls:
Slowest
28.0ms
(+ (pow x 2) (+ (* 1/12 (pow x 4)) (* 1/360 (pow x 6))))
27.0ms
(+ (pow x 2) (+ (* 1/12 (pow x 4)) (* 1/360 (pow x 6))))
26.0ms
(+ (pow x 2) (+ (* 1/12 (pow x 4)) (* 1/360 (pow x 6))))
10.0ms
(+ (pow x 2) (* 1/360 (pow x 6)))
10.0ms
(+ (pow x 2) (* 1/360 (pow x 6)))

prune328.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.0b

localize13.0ms

Local error

Found 4 expressions with local error:

20.3b
(cbrt (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))))
0.2b
(* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x)))
0.1b
(* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))
0.0b
(fma 1/12 (pow x 4) (cbrt (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))))

rewrite35.0ms

Algorithm
rewrite-expression-head
Rules
23×pow1
11×add-exp-log
11×add-cbrt-cube
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
pow-prod-up
associate-*r*
pow-plus
fma-udef
add-log-exp
log1p-expm1-u
cbrt-unprod
prod-exp
pow-prod-down
associate-*l*
expm1-log1p-u
pow2
*-commutative
pow3
distribute-lft-in
distribute-rgt-in
rem-cbrt-cube
pow1/3
cbrt-prod
Counts
4 → 75
Calls
4 calls:
Slowest
18.0ms
(* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))
8.0ms
(cbrt (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))))
7.0ms
(* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x)))
0.0ms
(fma 1/12 (pow x 4) (cbrt (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))))

series276.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
89.0ms
(* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))
77.0ms
(cbrt (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))))
71.0ms
(* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x)))
39.0ms
(fma 1/12 (pow x 4) (cbrt (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))))

simplify4.0s

Counts
48 → 87
Calls
48 calls:
Slowest
898.0ms
(* (* (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))) (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))) (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))))
739.0ms
(* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))
694.0ms
(* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x)))
336.0ms
(* (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))) (* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (fma 1/360 (pow x 6) (* x x))))
268.0ms
(* (* (fma 1/360 (pow x 6) (* x x)) (fma 1/360 (pow x 6) (* x x))) (* x x))

prune1.1s

Pruning

4 alts after pruning (2 fresh and 2 done)

Merged error: 0.0b

localize49.0ms

Local error

Found 4 expressions with local error:

2.3b
(+ (pow (- (exp x) 2) 3) (pow (exp (- x)) 3))
0.1b
(pow (- (exp x) 2) 3)
0.0b
(pow (exp (- x)) 3)
0.0b
(* (- (exp x) 2) (- (exp x) 2))

rewrite94.0ms

Algorithm
rewrite-expression-head
Rules
24×*-un-lft-identity
14×add-cube-cbrt
14×add-sqr-sqrt
13×cube-prod
13×unpow-prod-down
12×cube-div
11×fma-def
11×pow1
flip--
flip3--
add-cbrt-cube
add-exp-log
add-log-exp
pow-pow
distribute-lft-out
log1p-expm1-u
frac-add
exp-prod
frac-times
expm1-log1p-u
associate-*l*
associate-*r*
unpow3
exp-diff
cube-mult
exp-neg
neg-sub0
rem-cube-cbrt
associate-*r/
pow-exp
associate-*l/
distribute-lft-in
sub-neg
pow-to-exp
distribute-rgt-in
flip-+
cbrt-unprod
pow-prod-up
*-commutative
sum-cubes
prod-exp
pow-prod-down
pow-plus
flip3-+
sum-log
neg-mul-1
+-commutative
pow2
Counts
4 → 118
Calls
4 calls:
Slowest
56.0ms
(+ (pow (- (exp x) 2) 3) (pow (exp (- x)) 3))
24.0ms
(* (- (exp x) 2) (- (exp x) 2))
7.0ms
(pow (- (exp x) 2) 3)
4.0ms
(pow (exp (- x)) 3)

series198.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
120.0ms
(+ (pow (- (exp x) 2) 3) (pow (exp (- x)) 3))
31.0ms
(pow (- (exp x) 2) 3)
26.0ms
(pow (exp (- x)) 3)
21.0ms
(* (- (exp x) 2) (- (exp x) 2))

simplify8.3s

Counts
95 → 130
Calls
95 calls:
Slowest
1.0s
(+ (* (pow (- (* (exp x) (exp x)) (* 2 2)) 3) (pow (exp x) 3)) (* (pow (+ (exp x) 2) 3) (pow (exp 0) 3)))
450.0ms
(* (- (* (exp x) (exp x)) (* 2 2)) (- (pow (exp x) 3) (pow 2 3)))
425.0ms
(pow (- (pow (exp x) 3) (pow 2 3)) 3)
415.0ms
(* (+ (* (exp x) (exp x)) (+ (* 2 2) (* (exp x) 2))) (+ (* (exp x) (exp x)) (+ (* 2 2) (* (exp x) 2))))
323.0ms
(* (* (* (- (exp x) 2) (- (exp x) 2)) (- (exp x) 2)) (* (* (- (exp x) 2) (- (exp x) 2)) (- (exp x) 2)))

prune1.7s

Pruning

4 alts after pruning (2 fresh and 2 done)

Merged error: 0.0b

regimes75.0ms

Accuracy

0% (0.6b remaining)

Error of 0.6b against oracle of 0.0b and baseline of 0.6b

bsearch1.0ms

end0.0ms

sample5.5s

Algorithm
intervals
Results
15887×(pre true 80)
8062×(body real 80)
5620×(body real 1280)
1271×(body real 640)
588×(body real 320)
346×(body real 160)