Average Error: 58.6 → 0.3
Time: 40.4s
Precision: 64
Internal Precision: 128
\[\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} = -\infty:\\ \;\;\;\;\frac{1}{b} + \frac{1}{a}\\ \mathbf{elif}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} \le 0.10069954843841555:\\ \;\;\;\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{b} + \frac{1}{a}\\ \end{array}\]

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original58.6
Target14.4
Herbie0.3
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 2 regimes
  2. if (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) < -inf.0 or 0.10069954843841555 < (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))

    1. Initial program 62.2

      \[\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
    2. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\frac{1}{a} + \frac{1}{b}}\]

    if -inf.0 < (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) < 0.10069954843841555

    1. Initial program 4.6

      \[\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
    2. Taylor expanded around inf 4.6

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\color{blue}{\left(e^{a \cdot \varepsilon} - 1\right)} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} = -\infty:\\ \;\;\;\;\frac{1}{b} + \frac{1}{a}\\ \mathbf{elif}\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)} \le 0.10069954843841555:\\ \;\;\;\;\frac{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right) \cdot \varepsilon}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{b} + \frac{1}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019010 
(FPCore (a b eps)
  :name "expq3 (problem 3.4.2)"
  :pre (and (< -1 eps) (< eps 1))

  :herbie-target
  (/ (+ a b) (* a b))

  (/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))))

Details

Time bar (total: 39.3s)Debug log

sample578.0ms

Algorithm
intervals

simplify258.0ms

Counts
1 → 1
Calls
1 calls:
Slowest
258.0ms
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))

prune15.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 60.1b

localize62.0ms

Local error

Found 4 expressions with local error:

7.5b
(- (exp (* (+ a b) eps)) 1)
4.7b
(- (exp (* b eps)) 1)
4.4b
(- (exp (* a eps)) 1)
0.9b
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))

rewrite62.0ms

Algorithm
rewrite-expression-head
Rules
10×flip--
10×flip3--
add-exp-log
add-cbrt-cube
associate-/r/
add-sqr-sqrt
add-log-exp
add-cube-cbrt
associate-*r/
*-un-lft-identity
pow1
frac-times
difference-of-sqr-1
sub-neg
associate-/l/
associate-*l/
div-exp
cbrt-undiv
associate-/l*
div-inv
cbrt-unprod
prod-exp
times-frac
frac-2neg
associate-/r*
clear-num
Counts
4 → 63
Calls
4 calls:
Slowest
33.0ms
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))
10.0ms
(- (exp (* (+ a b) eps)) 1)
7.0ms
(- (exp (* b eps)) 1)
7.0ms
(- (exp (* a eps)) 1)

series309.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
173.0ms
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))
59.0ms
(- (exp (* (+ a b) eps)) 1)
39.0ms
(- (exp (* a eps)) 1)
38.0ms
(- (exp (* b eps)) 1)

simplify3.1s

Counts
32 → 75
Calls
32 calls:
Slowest
372.0ms
(* (+ (exp (* a eps)) 1) (+ (* (exp (* b eps)) (exp (* b eps))) (+ (* 1 1) (* (exp (* b eps)) 1))))
353.0ms
(+ (* 1/2 (* (pow a 2) (pow eps 2))) (+ (* 1/6 (* (pow a 3) (pow eps 3))) (* a eps)))
308.0ms
(+ (* eps b) (+ (* 1/2 (* (pow eps 2) (pow b 2))) (* 1/6 (* (pow eps 3) (pow b 3)))))
225.0ms
(- (log (* eps (- (exp (* (+ a b) eps)) 1))) (log (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))))
211.0ms
(/ (* (* (* eps (- (exp (* (+ a b) eps)) 1)) (* eps (- (exp (* (+ a b) eps)) 1))) (* eps (- (exp (* (+ a b) eps)) 1))) (* (* (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1))))

prune712.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.3b

localize7.0ms

Local error

Found 1 expressions with local error:

0.0b
(+ (/ 1 a) (/ 1 b))

rewrite3.0ms

Algorithm
rewrite-expression-head
Rules
*-un-lft-identity
distribute-lft-out
div-inv
add-log-exp
flip-+
add-cube-cbrt
add-exp-log
frac-add
add-cbrt-cube
flip3-+
sum-log
+-commutative
pow1
add-sqr-sqrt
Counts
1 → 16
Calls
1 calls:
Slowest
3.0ms
(+ (/ 1 a) (/ 1 b))

series7.0ms

Counts
1 → 3
Calls
1 calls:
Slowest
7.0ms
(+ (/ 1 a) (/ 1 b))

simplify43.0ms

Counts
10 → 19
Calls
10 calls:
Slowest
5.0ms
(* (exp (/ 1 a)) (exp (/ 1 b)))
5.0ms
(+ (/ 1 a) (/ 1 b))
5.0ms
(+ (/ 1 a) (/ 1 b))
4.0ms
(+ (/ 1 b) (/ 1 a))
4.0ms
(+ (/ 1 a) (/ 1 b))

prune140.0ms

Pruning

7 alts after pruning (6 fresh and 1 done)

Merged error: 0.2b

localize10.0ms

Local error

Found 4 expressions with local error:

0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))
0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))
0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))
0.5b
(* (cbrt (+ (/ 1 a) (/ 1 b))) (cbrt (+ (/ 1 a) (/ 1 b))))

rewrite20.0ms

Algorithm
rewrite-expression-head
Rules
35×cbrt-prod
33×cbrt-div
31×*-un-lft-identity
20×distribute-lft-out
20×div-inv
11×flip-+
11×add-cube-cbrt
11×frac-add
11×flip3-+
11×add-sqr-sqrt
10×associate-*l*
10×associate-*r*
pow1
frac-times
pow1/3
add-exp-log
add-log-exp
add-cbrt-cube
associate-*r/
associate-*l/
pow-prod-up
pow-prod-down
cbrt-unprod
*-commutative
prod-exp
pow-plus
pow2
Counts
4 → 105
Calls
4 calls:
Slowest
11.0ms
(* (cbrt (+ (/ 1 a) (/ 1 b))) (cbrt (+ (/ 1 a) (/ 1 b))))
2.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
2.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
2.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

series337.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
100.0ms
(* (cbrt (+ (/ 1 a) (/ 1 b))) (cbrt (+ (/ 1 a) (/ 1 b))))
88.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
76.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
73.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

simplify6.6s

Counts
94 → 117
Calls
94 calls:
Slowest
435.0ms
(- (+ (* 2/3 (* (/ 1 a) (pow b 1/3))) (pow (/ 1 b) 2/3)) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 4) 1/3))))
415.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))
410.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))
382.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))
315.0ms
(- (* (cbrt -1) (pow (/ -1 b) 1/3)) (+ (* 1/9 (* (/ (cbrt -1) (pow a 2)) (pow (* (pow b 5) -1) 1/3))) (* 1/3 (* (/ (cbrt -1) a) (pow (pow b 2) 1/3)))))

prune1.2s

Pruning

9 alts after pruning (8 fresh and 1 done)

Merged error: 0.2b

localize18.0ms

Local error

Found 4 expressions with local error:

0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))
0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))
0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))
0.6b
(cbrt (+ (/ 1 a) (/ 1 b)))

rewrite15.0ms

Algorithm
rewrite-expression-head
Rules
28×cbrt-prod
24×*-un-lft-identity
16×distribute-lft-out
16×div-inv
12×cbrt-div
add-cube-cbrt
add-sqr-sqrt
add-log-exp
flip-+
add-exp-log
frac-add
pow1/3
add-cbrt-cube
flip3-+
pow1
Counts
4 → 72
Calls
4 calls:
Slowest
4.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
4.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
4.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
3.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

series316.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
82.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
79.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
78.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
77.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

simplify4.1s

Counts
52 → 84
Calls
52 calls:
Slowest
592.0ms
(- (* (cbrt -1) (pow (/ -1 b) 1/3)) (+ (* 1/9 (* (/ (cbrt -1) (pow a 2)) (pow (* (pow b 5) -1) 1/3))) (* 1/3 (* (/ (cbrt -1) a) (pow (pow b 2) 1/3)))))
383.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))
373.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))
371.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))
356.0ms
(- (+ (pow (/ 1 b) 1/3) (* 1/3 (* (/ 1 a) (pow (pow b 2) 1/3)))) (* 1/9 (* (/ 1 (pow a 2)) (pow (pow b 5) 1/3))))

prune1.2s

Pruning

9 alts after pruning (7 fresh and 2 done)

Merged error: 0.2b

regimes326.0ms

Accuracy

93.4% (0.2b remaining)

Error of 0.3b against oracle of 0.1b and baseline of 3.4b

bsearch7.0ms

end0.0ms

sample19.8s

Algorithm
intervals