Average Error: 60.8 → 2.9
Time: 27.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}{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 r88851 = eps;
        double r88852 = a;
        double r88853 = b;
        double r88854 = r88852 + r88853;
        double r88855 = r88854 * r88851;
        double r88856 = exp(r88855);
        double r88857 = 1.0;
        double r88858 = r88856 - r88857;
        double r88859 = r88851 * r88858;
        double r88860 = r88852 * r88851;
        double r88861 = exp(r88860);
        double r88862 = r88861 - r88857;
        double r88863 = r88853 * r88851;
        double r88864 = exp(r88863);
        double r88865 = r88864 - r88857;
        double r88866 = r88862 * r88865;
        double r88867 = r88859 / r88866;
        return r88867;
}

double f(double a, double b, double __attribute__((unused)) eps) {
        double r88868 = 1.0;
        double r88869 = b;
        double r88870 = r88868 / r88869;
        double r88871 = a;
        double r88872 = r88868 / r88871;
        double r88873 = r88870 + r88872;
        return r88873;
}

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

Derivation

  1. Initial program 60.8

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

    \[\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. Using strategy rm
  4. Applied pow-prod-down57.8

    \[\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}} + \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)}\]
  5. Taylor expanded around 0 2.9

    \[\leadsto \color{blue}{\frac{1}{b} + \frac{1}{a}}\]
  6. Final simplification2.9

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

Reproduce

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