Average Error: 58.6 → 3.4
Time: 1.0m
Precision: 64
\[\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}\]
double f(double a, double b, double eps) {
        double r7522172 = eps;
        double r7522173 = a;
        double r7522174 = b;
        double r7522175 = r7522173 + r7522174;
        double r7522176 = r7522175 * r7522172;
        double r7522177 = exp(r7522176);
        double r7522178 = 1.0;
        double r7522179 = r7522177 - r7522178;
        double r7522180 = r7522172 * r7522179;
        double r7522181 = r7522173 * r7522172;
        double r7522182 = exp(r7522181);
        double r7522183 = r7522182 - r7522178;
        double r7522184 = r7522174 * r7522172;
        double r7522185 = exp(r7522184);
        double r7522186 = r7522185 - r7522178;
        double r7522187 = r7522183 * r7522186;
        double r7522188 = r7522180 / r7522187;
        return r7522188;
}

double f(double a, double b, double __attribute__((unused)) eps) {
        double r7522189 = 1.0;
        double r7522190 = a;
        double r7522191 = r7522189 / r7522190;
        double r7522192 = b;
        double r7522193 = r7522189 / r7522192;
        double r7522194 = r7522191 + r7522193;
        return r7522194;
}

\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

Target

Original58.6
Target14.2
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. Simplified34.4

    \[\leadsto \color{blue}{\frac{\frac{(e^{\left(a + b\right) \cdot \varepsilon} - 1)^* \cdot \varepsilon}{(e^{\varepsilon \cdot a} - 1)^*}}{(e^{\varepsilon \cdot b} - 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 2019101 +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))))