Average Error: 58.6 → 3.4
Time: 26.5s
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)}\]
\[\frac{1}{a} + \frac{1}{b}\]

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
Herbie3.4
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Initial program 58.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 0 3.4

    \[\leadsto \color{blue}{\frac{1}{a} + \frac{1}{b}}\]
  3. Final simplification3.4

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

Reproduce

herbie shell --seed 2019018 
(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: 25.9s)Debug log

sample599.0ms

Algorithm
intervals
Results
221.0ms93×body2560valid
159.0ms104×body1280valid
134.0ms50×body10240exit
30.0ms36×body640valid
13.0ms308×pre80true
6.0ms10×body320valid
3.0msbody160valid
2.0msbody80valid

simplify571.0ms

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

prune14.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 60.0b

localize53.0ms

Local error

Found 4 expressions with local error:

5.2b
(- (exp (* (+ a b) eps)) 1)
3.5b
(- (exp (* a eps)) 1)
2.8b
(- (exp (* b eps)) 1)
0.5b
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))

rewrite59.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
29.0ms
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))
12.0ms
(- (exp (* (+ a b) eps)) 1)
9.0ms
(- (exp (* a eps)) 1)
9.0ms
(- (exp (* b eps)) 1)

series308.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
215.0ms
(/ (* eps (- (exp (* (+ a b) eps)) 1)) (* (- (exp (* a eps)) 1) (- (exp (* b eps)) 1)))
40.0ms
(- (exp (* (+ a b) eps)) 1)
29.0ms
(- (exp (* b eps)) 1)
24.0ms
(- (exp (* a eps)) 1)

simplify3.4s

Counts
32 → 75
Calls
32 calls:
Slowest
511.0ms
(* (+ (exp (* a eps)) 1) (+ (* (exp (* b eps)) (exp (* b eps))) (+ (* 1 1) (* (exp (* b eps)) 1))))
275.0ms
(+ (* eps b) (+ (* 1/2 (* (pow eps 2) (pow b 2))) (* 1/6 (* (pow eps 3) (pow b 3)))))
274.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))))
252.0ms
(/ (* (* (* eps (- (exp (* (+ a b) eps)) 1)) (* eps (- (exp (* (+ a b) eps)) 1))) (* eps (- (exp (* (+ a b) eps)) 1))) (* (* (* (- (exp (* a eps)) 1) (- (exp (* a eps)) 1)) (- (exp (* a eps)) 1)) (* (* (- (exp (* b eps)) 1) (- (exp (* b eps)) 1)) (- (exp (* b eps)) 1))))
239.0ms
(/ (* (- (exp (* (+ a b) eps)) 1) eps) (- (+ (* (exp (* a eps)) (exp (* eps b))) 1) (+ (exp (* eps b)) (exp (* a eps)))))

prune966.0ms

Pruning

3 alts after pruning (3 fresh and 0 done)

Merged error: 0.0b

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

simplify24.0ms

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

prune151.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.0b

localize16.0ms

Local error

Found 1 expressions with local error:

13.2b
(/ (+ b a) (* a b))

rewrite6.0ms

Algorithm
rewrite-expression-head
Rules
associate-/l*
add-cube-cbrt
add-exp-log
add-cbrt-cube
times-frac
*-un-lft-identity
add-sqr-sqrt
associate-/l/
add-log-exp
div-inv
flip-+
div-exp
flip3-+
frac-2neg
associate-/r*
clear-num
cbrt-undiv
pow1
Counts
1 → 21
Calls
1 calls:
Slowest
5.0ms
(/ (+ b a) (* a b))

series26.0ms

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

simplify176.0ms

Counts
15 → 24
Calls
15 calls:
Slowest
79.0ms
(/ (* (* (+ b a) (+ b a)) (+ b a)) (* (* (* a b) (* a b)) (* a b)))
25.0ms
(- (log (+ b a)) (log (* a b)))
21.0ms
(- (* b b) (* a a))
10.0ms
(/ (* (cbrt (+ b a)) (cbrt (+ b a))) a)
6.0ms
(+ (pow b 3) (pow a 3))

prune227.0ms

Pruning

4 alts after pruning (3 fresh and 1 done)

Merged error: 0.0b

localize10.0ms

Local error

Found 2 expressions with local error:

6.6b
(/ (/ (+ b a) a) b)
0.0b
(/ (+ b a) a)

rewrite13.0ms

Algorithm
rewrite-expression-head
Rules
associate-/l*
add-cube-cbrt
*-un-lft-identity
add-sqr-sqrt
associate-/l/
div-inv
add-log-exp
add-exp-log
add-cbrt-cube
frac-2neg
clear-num
pow1
flip-+
flip3-+
Counts
2 → 30
Calls
2 calls:
Slowest
8.0ms
(/ (/ (+ b a) a) b)
4.0ms
(/ (+ b a) a)

series34.0ms

Counts
2 → 6
Calls
2 calls:
Slowest
22.0ms
(/ (/ (+ b a) a) b)
11.0ms
(/ (+ b a) a)

simplify65.0ms

Counts
14 → 36
Calls
14 calls:
Slowest
24.0ms
(- (* b b) (* a a))
6.0ms
(+ (pow b 3) (pow a 3))
4.0ms
(+ (/ 1 b) (/ 1 a))
4.0ms
(+ (/ 1 a) (/ 1 b))
4.0ms
(* (cbrt (+ b a)) (cbrt (+ b a)))

prune308.0ms

Pruning

4 alts after pruning (2 fresh and 2 done)

Merged error: 0.0b

regimes139.0ms

Accuracy

0% (3.4b remaining)

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

bsearch1.0ms

end0.0ms

sample18.8s

Algorithm
intervals
Results
6.7s2607×body2560valid
4.9s1893×body10240exit
4.8s3460×body1280valid
994.0ms1031×body640valid
851.0ms9894×pre80true
216.0ms320×body320valid
109.0ms458×body80valid
48.0ms125×body160valid