Average Error: 58.7 → 3.3
Time: 47.4s
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 r3331232 = eps;
        double r3331233 = a;
        double r3331234 = b;
        double r3331235 = r3331233 + r3331234;
        double r3331236 = r3331235 * r3331232;
        double r3331237 = exp(r3331236);
        double r3331238 = 1.0;
        double r3331239 = r3331237 - r3331238;
        double r3331240 = r3331232 * r3331239;
        double r3331241 = r3331233 * r3331232;
        double r3331242 = exp(r3331241);
        double r3331243 = r3331242 - r3331238;
        double r3331244 = r3331234 * r3331232;
        double r3331245 = exp(r3331244);
        double r3331246 = r3331245 - r3331238;
        double r3331247 = r3331243 * r3331246;
        double r3331248 = r3331240 / r3331247;
        return r3331248;
}

double f(double a, double b, double __attribute__((unused)) eps) {
        double r3331249 = 1.0;
        double r3331250 = b;
        double r3331251 = r3331249 / r3331250;
        double r3331252 = a;
        double r3331253 = r3331249 / r3331252;
        double r3331254 = r3331251 + r3331253;
        return r3331254;
}

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

Derivation

  1. Initial program 58.7

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

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

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

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

Reproduce

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