Average Error: 60.3 → 3.4
Time: 1.1m
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 r41331 = eps;
        double r41332 = a;
        double r41333 = b;
        double r41334 = r41332 + r41333;
        double r41335 = r41334 * r41331;
        double r41336 = exp(r41335);
        double r41337 = 1.0;
        double r41338 = r41336 - r41337;
        double r41339 = r41331 * r41338;
        double r41340 = r41332 * r41331;
        double r41341 = exp(r41340);
        double r41342 = r41341 - r41337;
        double r41343 = r41333 * r41331;
        double r41344 = exp(r41343);
        double r41345 = r41344 - r41337;
        double r41346 = r41342 * r41345;
        double r41347 = r41339 / r41346;
        return r41347;
}

double f(double a, double b, double __attribute__((unused)) eps) {
        double r41348 = 1.0;
        double r41349 = b;
        double r41350 = r41348 / r41349;
        double r41351 = a;
        double r41352 = r41348 / r41351;
        double r41353 = r41350 + r41352;
        return r41353;
}

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

Derivation

  1. Initial program 60.3

    \[\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}{b} + \frac{1}{a}}\]
  3. Final simplification3.4

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

Reproduce

herbie shell --seed 2019323 
(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))))