Average Error: 39.5 → 1.1
Time: 14.3s
Precision: 64
Internal Precision: 128
\[\frac{e^{x}}{e^{x} - 1}\]
\[\frac{e^{x}}{x + \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) \cdot \left(x \cdot x\right)}\]

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original39.5
Target39.0
Herbie1.1
\[\frac{1}{1 - e^{-x}}\]

Derivation

  1. Initial program 39.5

    \[\frac{e^{x}}{e^{x} - 1}\]
  2. Taylor expanded around 0 12.0

    \[\leadsto \frac{e^{x}}{\color{blue}{x + \left(\frac{1}{6} \cdot {x}^{3} + \frac{1}{2} \cdot {x}^{2}\right)}}\]
  3. Simplified1.1

    \[\leadsto \frac{e^{x}}{\color{blue}{x + \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) \cdot \left(x \cdot x\right)}}\]
  4. Final simplification1.1

    \[\leadsto \frac{e^{x}}{x + \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) \cdot \left(x \cdot x\right)}\]

Reproduce

herbie shell --seed 2019016 
(FPCore (x)
  :name "expq2 (section 3.11)"

  :herbie-target
  (/ 1 (- 1 (exp (- x))))

  (/ (exp x) (- (exp x) 1)))

Details

Time bar (total: 13.8s)Debug log

sample74.0ms

Algorithm
intervals
Results
315×(pre true 80)
109×(body real 80)
64×(body real 1280)
58×(body exit 10240)
46×(body real 640)
26×(body real 320)
12×(body real 160)

simplify4.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
4.0ms
(/ (exp x) (- (exp x) 1))

prune4.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 36.2b

localize8.0ms

Local error

Found 2 expressions with local error:

4.2b
(- (exp x) 1)
0.3b
(/ (exp x) (- (exp x) 1))

rewrite8.0ms

Algorithm
rewrite-expression-head
Rules
16×add-sqr-sqrt
12×times-frac
11×add-cube-cbrt
11×*-un-lft-identity
difference-of-sqr-1
add-cbrt-cube
associate-/r*
associate-/l*
add-exp-log
add-log-exp
flip--
associate-/r/
flip3--
pow1
div-inv
div-exp
frac-2neg
sub-neg
clear-num
cbrt-undiv
Counts
2 → 45
Calls
2 calls:
Slowest
5.0ms
(/ (exp x) (- (exp x) 1))
3.0ms
(- (exp x) 1)

series32.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
21.0ms
(/ (exp x) (- (exp x) 1))
11.0ms
(- (exp x) 1)

simplify507.0ms

Counts
41 → 51
Calls
41 calls:
Slowest
201.0ms
(/ (* (* (exp x) (exp x)) (exp x)) (* (* (- (exp x) 1) (- (exp x) 1)) (- (exp x) 1)))
74.0ms
(+ x (+ (* 1/6 (pow x 3)) (* 1/2 (pow x 2))))
31.0ms
(+ (* (exp x) (exp x)) (+ (* 1 1) (* (exp x) 1)))
18.0ms
(/ (* (cbrt (exp x)) (cbrt (exp x))) (* (cbrt (- (exp x) 1)) (cbrt (- (exp x) 1))))
11.0ms
(/ (* (cbrt (exp x)) (cbrt (exp x))) (sqrt (- (exp x) 1)))

prune312.0ms

Pruning

4 alts after pruning (4 fresh and 0 done)

Merged error: 0.3b

localize31.0ms

Local error

Found 3 expressions with local error:

0.3b
(* x 1/6)
0.1b
(* (+ (* x 1/6) 1/2) (* x x))
0.0b
(/ (exp x) (+ x (* (+ (* x 1/6) 1/2) (* x x))))

rewrite13.0ms

Algorithm
rewrite-expression-head
Rules
12×add-cube-cbrt
12×*-un-lft-identity
12×add-sqr-sqrt
times-frac
add-cbrt-cube
add-exp-log
pow1
add-log-exp
associate-/l*
associate-*l*
associate-/r*
flip-+
*-commutative
associate-/r/
associate-*l/
flip3-+
div-inv
cbrt-unprod
prod-exp
pow-prod-down
associate-*r*
div-exp
frac-2neg
clear-num
cbrt-undiv
Counts
3 → 54
Calls
3 calls:
Slowest
6.0ms
(* (+ (* x 1/6) 1/2) (* x x))
6.0ms
(/ (exp x) (+ x (* (+ (* x 1/6) 1/2) (* x x))))
0.0ms
(* x 1/6)

series54.0ms

Counts
3 → 9
Calls
3 calls:
Slowest
27.0ms
(* (+ (* x 1/6) 1/2) (* x x))
20.0ms
(/ (exp x) (+ x (* (+ (* x 1/6) 1/2) (* x x))))
7.0ms
(* x 1/6)

simplify3.3s

Counts
43 → 63
Calls
43 calls:
Slowest
438.0ms
(* (- (* (* x 1/6) (* x 1/6)) (* 1/2 1/2)) (* x x))
396.0ms
(* (+ (pow (* x 1/6) 3) (pow 1/2 3)) (* x x))
216.0ms
(- x (* (+ (* x 1/6) 1/2) (* x x)))
145.0ms
(- (+ (* 18 (/ (exp x) (pow x 5))) (* 6 (/ (exp x) (pow x 3)))) (* 18 (/ (exp x) (pow x 4))))
114.0ms
(/ (sqrt (exp x)) (sqrt (+ x (* (+ (* x 1/6) 1/2) (* x x)))))

prune476.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.3b

localize10.0ms

Local error

Found 2 expressions with local error:

0.3b
(* 1/12 x)
0.0b
(+ (* 1/12 x) (+ (/ 1 x) 1/2))

rewrite7.0ms

Algorithm
rewrite-expression-head
Rules
add-log-exp
add-cube-cbrt
add-exp-log
add-cbrt-cube
*-un-lft-identity
pow1
add-sqr-sqrt
flip-+
*-commutative
flip3-+
sum-log
associate-+r+
+-commutative
Counts
2 → 20
Calls
2 calls:
Slowest
6.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
0.0ms
(* 1/12 x)

series14.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
7.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
7.0ms
(* 1/12 x)

simplify55.0ms

Counts
7 → 26
Calls
7 calls:
Slowest
23.0ms
(* (exp (* 1/12 x)) (exp (+ (/ 1 x) 1/2)))
9.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
9.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
8.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
3.0ms
(* 1/12 x)

prune108.0ms

Pruning

5 alts after pruning (3 fresh and 2 done)

Merged error: 0.3b

localize14.0ms

Local error

Found 4 expressions with local error:

4.2b
(- (* (exp x) (exp x)) (* 1 1))
0.3b
(* (/ (exp x) (- (* (exp x) (exp x)) (* 1 1))) (+ (exp x) 1))
0.3b
(/ (exp x) (- (* (exp x) (exp x)) (* 1 1)))
0.0b
(* (exp x) (exp x))

rewrite34.0ms

Algorithm
rewrite-expression-head
Rules
24×add-cube-cbrt
24×times-frac
24×*-un-lft-identity
24×add-sqr-sqrt
21×associate-*l*
13×add-cbrt-cube
11×pow1
add-exp-log
difference-of-squares
add-log-exp
associate-*r*
associate-/r/
associate-/r*
associate-/l*
flip--
cbrt-unprod
prod-exp
flip3--
div-inv
flip-+
*-commutative
associate-*r/
pow-prod-down
div-exp
flip3-+
cbrt-undiv
frac-times
pow-prod-up
associate-*l/
diff-log
pow-plus
distribute-lft-in
frac-2neg
sub-neg
clear-num
distribute-rgt-in
pow2
Counts
4 → 107
Calls
4 calls:
Slowest
14.0ms
(* (/ (exp x) (- (* (exp x) (exp x)) (* 1 1))) (+ (exp x) 1))
10.0ms
(/ (exp x) (- (* (exp x) (exp x)) (* 1 1)))
5.0ms
(- (* (exp x) (exp x)) (* 1 1))
3.0ms
(* (exp x) (exp x))

series110.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
45.0ms
(/ (exp x) (- (* (exp x) (exp x)) (* 1 1)))
39.0ms
(* (/ (exp x) (- (* (exp x) (exp x)) (* 1 1))) (+ (exp x) 1))
16.0ms
(- (* (exp x) (exp x)) (* 1 1))
9.0ms
(* (exp x) (exp x))

simplify4.2s

Counts
94 → 119
Calls
94 calls:
Slowest
324.0ms
(* (- (* (exp x) (exp x)) (* 1 1)) (+ (* (exp x) (exp x)) (- (* 1 1) (* (exp x) 1))))
279.0ms
(* (/ (exp x) (- (* (exp x) (exp x)) (* 1 1))) (+ (exp x) 1))
235.0ms
(/ (* (exp x) (+ (exp x) 1)) (- (pow (exp x) 2) 1))
233.0ms
(* (exp x) (- (* (exp x) (exp x)) (* 1 1)))
198.0ms
(* 1 (/ (exp x) (- (* (exp x) (exp x)) (* 1 1))))

prune736.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.2b

regimes31.0ms

Accuracy

0% (0.7b remaining)

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

bsearch1.0ms

end0.0ms

sample3.7s

Algorithm
intervals
Results
10554×(pre true 80)
2927×(body real 80)
2551×(body exit 10240)
2224×(body real 1280)
1655×(body real 640)
781×(body real 320)
416×(body real 160)