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

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original39.7
Target39.2
Herbie1.1
\[\frac{1}{1 - e^{-x}}\]

Derivation

  1. Initial program 39.7

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

    \[\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. Using strategy rm
  5. Applied *-un-lft-identity1.1

    \[\leadsto \frac{\color{blue}{1 \cdot e^{x}}}{x + \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) \cdot \left(x \cdot x\right)}\]
  6. Applied associate-/l*1.1

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

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

Reproduce

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

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

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

Details

Time bar (total: 16.4s)Debug log

sample70.0ms

Algorithm
intervals

simplify5.0ms

Counts
1 → 1
Calls

1 calls. Slowest were:

4.0ms
(/ (exp x) (- (exp x) 1))

prune8.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 42.2b

localize17.0ms

Local error

Found 2 expressions with local error:

3.6b
(- (exp x) 1)
0.7b
(/ (exp x) (- (exp x) 1))

rewrite32.0ms

Algorithm
rewrite-expression-head
Counts
2 → 45
Calls

2 calls. Slowest were:

26.0ms
(/ (exp x) (- (exp x) 1))
6.0ms
(- (exp x) 1)

series35.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

23.0ms
(/ (exp x) (- (exp x) 1))
12.0ms
(- (exp x) 1)

simplify654.0ms

Counts
41 → 51
Calls

41 calls. Slowest were:

226.0ms
(/ (* (* (exp x) (exp x)) (exp x)) (* (* (- (exp x) 1) (- (exp x) 1)) (- (exp x) 1)))
125.0ms
(+ x (+ (* 1/6 (pow x 3)) (* 1/2 (pow x 2))))
30.0ms
(+ (* (exp x) (exp x)) (+ (* 1 1) (* (exp x) 1)))

prune385.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.7b

localize24.0ms

Local error

Found 3 expressions with local error:

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

rewrite10.0ms

Algorithm
rewrite-expression-head
Counts
3 → 54
Calls

3 calls. Slowest were:

6.0ms
(* (+ (* x 1/6) 1/2) (* x x))
3.0ms
(/ (exp x) (+ x (* (+ (* x 1/6) 1/2) (* x x))))
0.0ms
(* x 1/6)

series84.0ms

Counts
3 → 9
Calls

3 calls. Slowest were:

43.0ms
(* (+ (* x 1/6) 1/2) (* x x))
34.0ms
(/ (exp x) (+ x (* (+ (* x 1/6) 1/2) (* x x))))
7.0ms
(* x 1/6)

simplify3.9s

Counts
43 → 63
Calls

43 calls. Slowest were:

500.0ms
(- x (* (+ (* x 1/6) 1/2) (* x x)))
463.0ms
(* (- (* (* x 1/6) (* x 1/6)) (* 1/2 1/2)) (* x x))
359.0ms
(* (+ (pow (* x 1/6) 3) (pow 1/2 3)) (* x x))

prune602.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.7b

localize6.0ms

Local error

Found 4 expressions with local error:

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

rewrite23.0ms

Algorithm
rewrite-expression-head
Counts
4 → 82
Calls

4 calls. Slowest were:

13.0ms
(/ (+ x (* (+ (* x 1/6) 1/2) (* x x))) (exp x))
6.0ms
(* (+ (* x 1/6) 1/2) (* x x))
3.0ms
(/ 1 (/ (+ x (* (+ (* x 1/6) 1/2) (* x x))) (exp x)))

series99.0ms

Counts
4 → 12
Calls

4 calls. Slowest were:

38.0ms
(* (+ (* x 1/6) 1/2) (* x x))
29.0ms
(/ 1 (/ (+ x (* (+ (* x 1/6) 1/2) (* x x))) (exp x)))
20.0ms
(/ (+ x (* (+ (* x 1/6) 1/2) (* x x))) (exp x))
12.0ms
(* x 1/6)

simplify5.5s

Counts
61 → 94
Calls

61 calls. Slowest were:

495.0ms
(+ (pow x 3) (pow (* (+ (* x 1/6) 1/2) (* x x)) 3))
494.0ms
(* (- (* (* x 1/6) (* x 1/6)) (* 1/2 1/2)) (* x x))
469.0ms
(- (* x x) (* (* (+ (* x 1/6) 1/2) (* x x)) (* (+ (* x 1/6) 1/2) (* x x))))

prune803.0ms

Pruning

2 alts after pruning (1 fresh and 1 done)

Merged error: 0.7b

localize22.0ms

Local error

Found 2 expressions with local error:

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

rewrite15.0ms

Algorithm
rewrite-expression-head
Counts
2 → 20
Calls

2 calls. Slowest were:

14.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
0.0ms
(* 1/12 x)

series25.0ms

Counts
2 → 6
Calls

2 calls. Slowest were:

13.0ms
(* 1/12 x)
12.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))

simplify82.0ms

Counts
7 → 26
Calls

7 calls. Slowest were:

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

prune194.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.7b

regimes40.0ms

Accuracy

0% (0.2b remaining)

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

bsearch2.0ms

end0.0ms

sample3.7s

Algorithm
intervals