Average Error: 58.4 → 3.5
Time: 53.3s
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}{b} + \frac{1}{a}\]
\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}{b} + \frac{1}{a}
double f(double a, double b, double eps) {
        double r4065730 = eps;
        double r4065731 = a;
        double r4065732 = b;
        double r4065733 = r4065731 + r4065732;
        double r4065734 = r4065733 * r4065730;
        double r4065735 = exp(r4065734);
        double r4065736 = 1.0;
        double r4065737 = r4065735 - r4065736;
        double r4065738 = r4065730 * r4065737;
        double r4065739 = r4065731 * r4065730;
        double r4065740 = exp(r4065739);
        double r4065741 = r4065740 - r4065736;
        double r4065742 = r4065732 * r4065730;
        double r4065743 = exp(r4065742);
        double r4065744 = r4065743 - r4065736;
        double r4065745 = r4065741 * r4065744;
        double r4065746 = r4065738 / r4065745;
        return r4065746;
}

double f(double a, double b, double __attribute__((unused)) eps) {
        double r4065747 = 1.0;
        double r4065748 = b;
        double r4065749 = r4065747 / r4065748;
        double r4065750 = a;
        double r4065751 = r4065747 / r4065750;
        double r4065752 = r4065749 + r4065751;
        return r4065752;
}

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

Derivation

  1. Initial program 58.4

    \[\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.2

    \[\leadsto \color{blue}{\frac{\frac{\varepsilon}{\mathsf{expm1}\left(\varepsilon \cdot b\right)} \cdot \mathsf{expm1}\left(\left(a + b\right) \cdot \varepsilon\right)}{\mathsf{expm1}\left(\varepsilon \cdot a\right)}}\]
  3. Taylor expanded around 0 3.5

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

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

Reproduce

herbie shell --seed 2019142 +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))))