Average Error: 60.6 → 11.0
Time: 14.5s
Precision: 64
\[-1 \lt \varepsilon \land \varepsilon \lt 1\]
\[\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} + \left(\frac{1}{2} \cdot \frac{a \cdot \varepsilon}{b} + \frac{1}{b}\right)\]
\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} + \left(\frac{1}{2} \cdot \frac{a \cdot \varepsilon}{b} + \frac{1}{b}\right)
double f(double a, double b, double eps) {
        double r134575 = eps;
        double r134576 = a;
        double r134577 = b;
        double r134578 = r134576 + r134577;
        double r134579 = r134578 * r134575;
        double r134580 = exp(r134579);
        double r134581 = 1.0;
        double r134582 = r134580 - r134581;
        double r134583 = r134575 * r134582;
        double r134584 = r134576 * r134575;
        double r134585 = exp(r134584);
        double r134586 = r134585 - r134581;
        double r134587 = r134577 * r134575;
        double r134588 = exp(r134587);
        double r134589 = r134588 - r134581;
        double r134590 = r134586 * r134589;
        double r134591 = r134583 / r134590;
        return r134591;
}

double f(double a, double b, double eps) {
        double r134592 = 1.0;
        double r134593 = a;
        double r134594 = r134592 / r134593;
        double r134595 = 0.5;
        double r134596 = eps;
        double r134597 = r134593 * r134596;
        double r134598 = b;
        double r134599 = r134597 / r134598;
        double r134600 = r134595 * r134599;
        double r134601 = r134592 / r134598;
        double r134602 = r134600 + r134601;
        double r134603 = r134594 + r134602;
        return r134603;
}

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

Original60.6
Target14.8
Herbie11.0
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Initial program 60.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 58.4

    \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\color{blue}{\left(\frac{1}{6} \cdot \left({a}^{3} \cdot {\varepsilon}^{3}\right) + \left(\frac{1}{2} \cdot \left({a}^{2} \cdot {\varepsilon}^{2}\right) + a \cdot \varepsilon\right)\right)} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
  3. Simplified58.4

    \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\color{blue}{\left(\frac{1}{6} \cdot \left({a}^{3} \cdot {\varepsilon}^{3}\right) + \varepsilon \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot \varepsilon\right)\right)} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
  4. Using strategy rm
  5. Applied pow-prod-down57.7

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

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

    \[\leadsto \color{blue}{\frac{1}{a} + \left(\frac{1}{2} \cdot \frac{a \cdot \varepsilon}{b} + \frac{1}{b}\right)}\]
  8. Final simplification11.0

    \[\leadsto \frac{1}{a} + \left(\frac{1}{2} \cdot \frac{a \cdot \varepsilon}{b} + \frac{1}{b}\right)\]

Reproduce

herbie shell --seed 2020045 
(FPCore (a b eps)
  :name "expq3 (problem 3.4.2)"
  :precision binary64
  :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))))