Average Error: 40.9 → 0.6
Time: 56.0s
Precision: 64
Internal Precision: 128
\[\frac{e^{x}}{e^{x} - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.0017338365361946662:\\ \;\;\;\;\sqrt[3]{\left(e^{x} + 1\right) + e^{x + x}} \cdot \left(\frac{e^{x}}{{\left(e^{x}\right)}^{3} - 1} \cdot \left(\sqrt[3]{\left(e^{x} + 1\right) + e^{x + x}} \cdot \sqrt[3]{\left(e^{x} + 1\right) + e^{x + x}}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{x} + \frac{1}{2}\right) + x \cdot \frac{1}{12}\\ \end{array}\]

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original40.9
Target40.5
Herbie0.6
\[\frac{1}{1 - e^{-x}}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -0.0017338365361946662

    1. Initial program 0.0

      \[\frac{e^{x}}{e^{x} - 1}\]
    2. Using strategy rm
    3. Applied flip3--0.0

      \[\leadsto \frac{e^{x}}{\color{blue}{\frac{{\left(e^{x}\right)}^{3} - {1}^{3}}{e^{x} \cdot e^{x} + \left(1 \cdot 1 + e^{x} \cdot 1\right)}}}\]
    4. Applied associate-/r/0.0

      \[\leadsto \color{blue}{\frac{e^{x}}{{\left(e^{x}\right)}^{3} - {1}^{3}} \cdot \left(e^{x} \cdot e^{x} + \left(1 \cdot 1 + e^{x} \cdot 1\right)\right)}\]
    5. Simplified0.0

      \[\leadsto \frac{e^{x}}{{\left(e^{x}\right)}^{3} - {1}^{3}} \cdot \color{blue}{\left(e^{x + x} + \left(1 + e^{x}\right)\right)}\]
    6. Using strategy rm
    7. Applied add-cube-cbrt0.0

      \[\leadsto \frac{e^{x}}{{\left(e^{x}\right)}^{3} - {1}^{3}} \cdot \color{blue}{\left(\left(\sqrt[3]{e^{x + x} + \left(1 + e^{x}\right)} \cdot \sqrt[3]{e^{x + x} + \left(1 + e^{x}\right)}\right) \cdot \sqrt[3]{e^{x + x} + \left(1 + e^{x}\right)}\right)}\]
    8. Applied associate-*r*0.0

      \[\leadsto \color{blue}{\left(\frac{e^{x}}{{\left(e^{x}\right)}^{3} - {1}^{3}} \cdot \left(\sqrt[3]{e^{x + x} + \left(1 + e^{x}\right)} \cdot \sqrt[3]{e^{x + x} + \left(1 + e^{x}\right)}\right)\right) \cdot \sqrt[3]{e^{x + x} + \left(1 + e^{x}\right)}}\]

    if -0.0017338365361946662 < x

    1. Initial program 60.4

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

      \[\leadsto \color{blue}{\frac{1}{12} \cdot x + \left(\frac{1}{x} + \frac{1}{2}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.0017338365361946662:\\ \;\;\;\;\sqrt[3]{\left(e^{x} + 1\right) + e^{x + x}} \cdot \left(\frac{e^{x}}{{\left(e^{x}\right)}^{3} - 1} \cdot \left(\sqrt[3]{\left(e^{x} + 1\right) + e^{x + x}} \cdot \sqrt[3]{\left(e^{x} + 1\right) + e^{x + x}}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{x} + \frac{1}{2}\right) + x \cdot \frac{1}{12}\\ \end{array}\]

Reproduce

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

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

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

Details

Time bar (total: 55.5s)Debug log

sample131.0ms

Algorithm
intervals

simplify8.0ms

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

prune7.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 39.9b

localize16.0ms

Local error

Found 2 expressions with local error:

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

rewrite18.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
11.0ms
(/ (exp x) (- (exp x) 1))
5.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)

simplify649.0ms

Counts
41 → 51
Calls
41 calls:
Slowest
266.0ms
(/ (* (* (exp x) (exp x)) (exp x)) (* (* (- (exp x) 1) (- (exp x) 1)) (- (exp x) 1)))
132.0ms
(+ x (+ (* 1/6 (pow x 3)) (* 1/2 (pow x 2))))
58.0ms
(+ (* (exp x) (exp x)) (+ (* 1 1) (* (exp x) 1)))
20.0ms
(/ (* (cbrt (exp x)) (cbrt (exp x))) (* (cbrt (- (exp x) 1)) (cbrt (- (exp x) 1))))
9.0ms
(/ (* (cbrt (exp x)) (cbrt (exp x))) 1)

prune271.0ms

Pruning

2 alts after pruning (2 fresh and 0 done)

Merged error: 0.2b

localize10.0ms

Local error

Found 2 expressions with local error:

0.4b
(* 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)

series15.0ms

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

simplify56.0ms

Counts
7 → 26
Calls
7 calls:
Slowest
25.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))
9.0ms
(+ (* 1/12 x) (+ (/ 1 x) 1/2))
1.0ms
(* 1/12 x)

prune112.0ms

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 0.2b

localize24.0ms

Local error

Found 4 expressions with local error:

3.5b
(- (pow (exp x) 3) (pow 1 3))
0.3b
(* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (+ (exp (+ x x)) (+ 1 (exp x))))
0.3b
(/ (exp x) (- (pow (exp x) 3) (pow 1 3)))
0.0b
(pow (exp x) 3)

rewrite36.0ms

Algorithm
rewrite-expression-head
Rules
82×add-sqr-sqrt
60×*-un-lft-identity
54×times-frac
34×add-cube-cbrt
33×associate-*l*
24×difference-of-squares
16×distribute-lft-out--
12×add-cbrt-cube
11×cube-prod
11×unpow-prod-down
add-exp-log
associate-/r*
cube-mult
difference-cubes
pow1
add-log-exp
associate-/r/
associate-*r*
associate-/l*
flip--
flip3--
div-inv
flip-+
cbrt-unprod
associate-*r/
prod-exp
div-exp
flip3-+
cbrt-undiv
frac-times
rem-cube-cbrt
distribute-lft-out
*-commutative
pow-exp
associate-*l/
pow-prod-down
unpow3
diff-log
distribute-lft-in
frac-2neg
pow-pow
sub-neg
clear-num
pow-to-exp
distribute-rgt-in
Counts
4 → 147
Calls
4 calls:
Slowest
19.0ms
(* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (+ (exp (+ x x)) (+ 1 (exp x))))
8.0ms
(/ (exp x) (- (pow (exp x) 3) (pow 1 3)))
6.0ms
(- (pow (exp x) 3) (pow 1 3))
1.0ms
(pow (exp x) 3)

series125.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
57.0ms
(* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (+ (exp (+ x x)) (+ 1 (exp x))))
34.0ms
(/ (exp x) (- (pow (exp x) 3) (pow 1 3)))
21.0ms
(- (pow (exp x) 3) (pow 1 3))
14.0ms
(pow (exp x) 3)

simplify6.5s

Counts
151 → 159
Calls
151 calls:
Slowest
635.0ms
(* (- (pow (exp x) 3) (pow 1 3)) (+ (* (exp (+ x x)) (exp (+ x x))) (- (* (+ 1 (exp x)) (+ 1 (exp x))) (* (exp (+ x x)) (+ 1 (exp x))))))
476.0ms
(* (exp x) (+ (pow (exp (+ x x)) 3) (pow (+ 1 (exp x)) 3)))
473.0ms
(* (- (pow (exp x) 3) (pow 1 3)) (- (exp (+ x x)) (+ 1 (exp x))))
393.0ms
(+ (* 3 x) (+ (* 9/2 (pow x 2)) 1))
334.0ms
(* (/ (* (* (exp x) (exp x)) (exp x)) (* (* (- (pow (exp x) 3) (pow 1 3)) (- (pow (exp x) 3) (pow 1 3))) (- (pow (exp x) 3) (pow 1 3)))) (* (* (+ (exp (+ x x)) (+ 1 (exp x))) (+ (exp (+ x x)) (+ 1 (exp x)))) (+ (exp (+ x x)) (+ 1 (exp x)))))

prune1.7s

Pruning

3 alts after pruning (2 fresh and 1 done)

Merged error: 0.2b

localize12.0ms

Local error

Found 4 expressions with local error:

3.5b
(- (pow (exp x) 3) (pow 1 3))
0.3b
(* (* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))
0.3b
(* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x))))))
0.3b
(/ (exp x) (- (pow (exp x) 3) (pow 1 3)))

rewrite200.0ms

Algorithm
rewrite-expression-head
Rules
132×cbrt-div
98×frac-times
81×add-sqr-sqrt
66×flip-+
66×flip3-+
59×*-un-lft-identity
54×times-frac
50×associate-*r/
37×associate-*l/
34×associate-*l*
33×add-cube-cbrt
31×add-exp-log
24×difference-of-squares
23×add-cbrt-cube
18×pow1
17×cbrt-unprod
17×prod-exp
16×distribute-lft-out--
pow-prod-down
associate-/r*
associate-*r*
cube-prod
unpow-prod-down
difference-cubes
cube-mult
add-log-exp
div-exp
cbrt-undiv
associate-/r/
cbrt-prod
associate-/l*
flip--
flip3--
div-inv
*-commutative
distribute-lft-out
diff-log
frac-2neg
sub-neg
clear-num
Counts
4 → 222
Calls
4 calls:
Slowest
129.0ms
(* (* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))
45.0ms
(* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x))))))
11.0ms
(/ (exp x) (- (pow (exp x) 3) (pow 1 3)))
9.0ms
(- (pow (exp x) 3) (pow 1 3))

series415.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
246.0ms
(* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x))))))
100.0ms
(* (* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))
46.0ms
(/ (exp x) (- (pow (exp x) 3) (pow 1 3)))
23.0ms
(- (pow (exp x) 3) (pow 1 3))

simplify38.1s

Counts
268 → 234
Calls
268 calls:
Slowest
620.0ms
(* (cbrt (+ (* (exp (+ x x)) (exp (+ x x))) (- (* (+ 1 (exp x)) (+ 1 (exp x))) (* (exp (+ x x)) (+ 1 (exp x)))))) (cbrt (+ (* (exp (+ x x)) (exp (+ x x))) (- (* (+ 1 (exp x)) (+ 1 (exp x))) (* (exp (+ x x)) (+ 1 (exp x)))))))
570.0ms
(* (* (exp x) (* (cbrt (+ (pow (exp (+ x x)) 3) (pow (+ 1 (exp x)) 3))) (cbrt (+ (pow (exp (+ x x)) 3) (pow (+ 1 (exp x)) 3))))) (cbrt (+ (pow (exp (+ x x)) 3) (pow (+ 1 (exp x)) 3))))
569.0ms
(* (* (* (/ (exp x) (- (pow (exp x) 3) (pow 1 3))) (/ (exp x) (- (pow (exp x) 3) (pow 1 3)))) (/ (exp x) (- (pow (exp x) 3) (pow 1 3)))) (* (* (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x))))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))) (* (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (exp (+ x x)) (+ 1 (exp x)))))))
541.0ms
(* (* (/ (* (* (exp x) (exp x)) (exp x)) (* (* (- (pow (exp x) 3) (pow 1 3)) (- (pow (exp x) 3) (pow 1 3))) (- (pow (exp x) 3) (pow 1 3)))) (* (+ (exp (+ x x)) (+ 1 (exp x))) (+ (exp (+ x x)) (+ 1 (exp x))))) (+ (exp (+ x x)) (+ 1 (exp x))))
500.0ms
(* (* (- (pow (exp x) 3) (pow 1 3)) (* (cbrt (- (exp (+ x x)) (+ 1 (exp x)))) (cbrt (+ (* (exp (+ x x)) (exp (+ x x))) (- (* (+ 1 (exp x)) (+ 1 (exp x))) (* (exp (+ x x)) (+ 1 (exp x)))))))) (cbrt (+ (* (exp (+ x x)) (exp (+ x x))) (- (* (+ 1 (exp x)) (+ 1 (exp x))) (* (exp (+ x x)) (+ 1 (exp x)))))))

prune3.5s

Pruning

3 alts after pruning (1 fresh and 2 done)

Merged error: 0.2b

regimes52.0ms

Accuracy

99.2% (0.2b remaining)

Error of 0.6b against oracle of 0.4b and baseline of 20.6b

bsearch48.0ms

end0.0ms

sample3.5s

Algorithm
intervals