Average Error: 58.6 → 3.4
Time: 39.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. Simplified27.3

    \[\leadsto \color{blue}{\frac{(e^{\left(a + b\right) \cdot \varepsilon} - 1)^*}{(e^{\varepsilon \cdot b} - 1)^*} \cdot \frac{\varepsilon}{(e^{\varepsilon \cdot a} - 1)^*}}\]
  3. Taylor expanded around 0 3.4

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

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

Reproduce

herbie shell --seed 2019010 +o rules:numerics
(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: 38.6s)Debug log

sample610.0ms

Algorithm
intervals

simplify133.0ms

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

prune16.0ms

Pruning

1 alts after pruning (1 fresh and 0 done)

Merged error: 23.4b

localize26.0ms

Local error

Found 4 expressions with local error:

15.1b
(/ eps (expm1 (* eps a)))
11.3b
(/ (expm1 (* (+ a b) eps)) (expm1 (* eps b)))
4.2b
(* (/ (expm1 (* (+ a b) eps)) (expm1 (* eps b))) (/ eps (expm1 (* eps a))))
0.0b
(* (+ a b) eps)

rewrite13.0ms

Algorithm
rewrite-expression-head
Rules
22×add-cube-cbrt
22×*-un-lft-identity
22×add-sqr-sqrt
18×times-frac
16×associate-*l*
11×add-exp-log
11×add-cbrt-cube
associate-/r*
pow1
add-log-exp
div-inv
log1p-expm1-u
associate-*r*
expm1-log1p-u
associate-/l*
associate-*l/
cbrt-unprod
*-commutative
prod-exp
div-exp
frac-2neg
clear-num
cbrt-undiv
expm1-udef
flip-+
associate-*r/
pow-prod-down
div-sub
flip3-+
frac-times
Counts
4 → 95
Calls
4 calls:
Slowest
6.0ms
(* (/ (expm1 (* (+ a b) eps)) (expm1 (* eps b))) (/ eps (expm1 (* eps a))))
3.0ms
(/ (expm1 (* (+ a b) eps)) (expm1 (* eps b)))
2.0ms
(* (+ a b) eps)
1.0ms
(/ eps (expm1 (* eps a)))

series610.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
474.0ms
(* (/ (expm1 (* (+ a b) eps)) (expm1 (* eps b))) (/ eps (expm1 (* eps a))))
75.0ms
(/ (expm1 (* (+ a b) eps)) (expm1 (* eps b)))
35.0ms
(/ eps (expm1 (* eps a)))
26.0ms
(* (+ a b) eps)

simplify2.7s

Counts
70 → 107
Calls
70 calls:
Slowest
430.0ms
(* (* (* (/ (expm1 (* (+ a b) eps)) (expm1 (* eps b))) (/ (expm1 (* (+ a b) eps)) (expm1 (* eps b)))) (/ (expm1 (* (+ a b) eps)) (expm1 (* eps b)))) (* (* (/ eps (expm1 (* eps a))) (/ eps (expm1 (* eps a)))) (/ eps (expm1 (* eps a)))))
275.0ms
(+ (- (log (expm1 (* (+ a b) eps))) (log (expm1 (* eps b)))) (log (/ eps (expm1 (* eps a)))))
216.0ms
(* (- (* a a) (* b b)) eps)
201.0ms
(/ (* (- (exp (* (+ a b) eps)) 1) eps) (- (+ (* (exp (* a eps)) (exp (* eps b))) 1) (+ (exp (* eps b)) (exp (* a eps)))))
186.0ms
(/ (* (- (exp (* (+ a b) eps)) 1) eps) (- (+ (* (exp (* a eps)) (exp (* eps b))) 1) (+ (exp (* eps b)) (exp (* a eps)))))

prune1.3s

Pruning

4 alts after pruning (4 fresh and 0 done)

Merged error: 0.2b

localize8.0ms

Local error

Found 1 expressions with local error:

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

rewrite4.0ms

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

series7.0ms

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

simplify51.0ms

Counts
12 → 25
Calls
12 calls:
Slowest
7.0ms
(+ (* 1 b) (* a 1))
5.0ms
(+ (/ 1 a) (/ 1 b))
5.0ms
(* (exp (/ 1 a)) (exp (/ 1 b)))
5.0ms
(+ (/ 1 a) (/ 1 b))
5.0ms
(+ (/ 1 a) (/ 1 b))

prune190.0ms

Pruning

6 alts after pruning (5 fresh and 1 done)

Merged error: 0.2b

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

rewrite26.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
log1p-expm1-u
add-cbrt-cube
expm1-log1p-u
associate-*r/
associate-*l/
pow-prod-up
pow-prod-down
cbrt-unprod
*-commutative
prod-exp
pow-plus
pow2
Counts
4 → 113
Calls
4 calls:
Slowest
12.0ms
(* (cbrt (+ (/ 1 a) (/ 1 b))) (cbrt (+ (/ 1 a) (/ 1 b))))
4.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
4.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
4.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

series355.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
113.0ms
(* (cbrt (+ (/ 1 a) (/ 1 b))) (cbrt (+ (/ 1 a) (/ 1 b))))
82.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
81.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
79.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

simplify7.0s

Counts
94 → 125
Calls
94 calls:
Slowest
464.0ms
(* (cbrt (+ (pow (/ 1 a) 3) (pow (/ 1 b) 3))) (cbrt (- (* (/ 1 a) (/ 1 a)) (* (/ 1 b) (/ 1 b)))))
433.0ms
(* (cbrt (- (* (/ 1 a) (/ 1 a)) (* (/ 1 b) (/ 1 b)))) (cbrt (+ (pow (/ 1 a) 3) (pow (/ 1 b) 3))))
409.0ms
(* (cbrt (- (* (/ 1 a) (/ 1 a)) (* (/ 1 b) (/ 1 b)))) (cbrt (+ (* 1 b) (* a 1))))
295.0ms
(cbrt (+ (* (/ 1 a) (/ 1 a)) (- (* (/ 1 b) (/ 1 b)) (* (/ 1 a) (/ 1 b)))))
293.0ms
(* (cbrt (+ (* (/ 1 a) (/ 1 a)) (- (* (/ 1 b) (/ 1 b)) (* (/ 1 a) (/ 1 b))))) (cbrt (+ (* (/ 1 a) (/ 1 a)) (- (* (/ 1 b) (/ 1 b)) (* (/ 1 a) (/ 1 b))))))

prune1.3s

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.6b
(cbrt (+ (/ 1 a) (/ 1 b)))

rewrite9.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
log1p-expm1-u
flip-+
add-exp-log
frac-add
pow1/3
add-cbrt-cube
flip3-+
pow1
expm1-log1p-u
Counts
4 → 80
Calls
4 calls:
Slowest
2.0ms
(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)))

series368.0ms

Counts
4 → 12
Calls
4 calls:
Slowest
108.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
94.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
83.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))
82.0ms
(cbrt (+ (/ 1 a) (/ 1 b)))

simplify2.4s

Counts
52 → 92
Calls
52 calls:
Slowest
230.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))))
226.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))))
221.0ms
(cbrt (- (* (/ 1 a) (/ 1 a)) (* (/ 1 b) (/ 1 b))))
212.0ms
(cbrt (- (* (/ 1 a) (/ 1 a)) (* (/ 1 b) (/ 1 b))))
203.0ms
(cbrt (- (* (/ 1 a) (/ 1 a)) (* (/ 1 b) (/ 1 b))))

prune961.0ms

Pruning

7 alts after pruning (5 fresh and 2 done)

Merged error: 0.2b

regimes159.0ms

Accuracy

0% (3.4b remaining)

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

bsearch1.0ms

end0.0ms

sample20.2s

Algorithm
intervals