Average Error: 60.4 → 4.8
Time: 16.9s
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)}\]
\[\begin{array}{l} \mathbf{if}\;\varepsilon \le 5.3360736243582115 \cdot 10^{-31}:\\ \;\;\;\;\frac{1}{b} + \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\right) + e^{\left(a + b\right) \cdot \varepsilon}}\\ \end{array}\]
\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)}
\begin{array}{l}
\mathbf{if}\;\varepsilon \le 5.3360736243582115 \cdot 10^{-31}:\\
\;\;\;\;\frac{1}{b} + \frac{1}{a}\\

\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\right) + e^{\left(a + b\right) \cdot \varepsilon}}\\

\end{array}
double f(double a, double b, double eps) {
        double r91401 = eps;
        double r91402 = a;
        double r91403 = b;
        double r91404 = r91402 + r91403;
        double r91405 = r91404 * r91401;
        double r91406 = exp(r91405);
        double r91407 = 1.0;
        double r91408 = r91406 - r91407;
        double r91409 = r91401 * r91408;
        double r91410 = r91402 * r91401;
        double r91411 = exp(r91410);
        double r91412 = r91411 - r91407;
        double r91413 = r91403 * r91401;
        double r91414 = exp(r91413);
        double r91415 = r91414 - r91407;
        double r91416 = r91412 * r91415;
        double r91417 = r91409 / r91416;
        return r91417;
}

double f(double a, double b, double eps) {
        double r91418 = eps;
        double r91419 = 5.3360736243582115e-31;
        bool r91420 = r91418 <= r91419;
        double r91421 = 1.0;
        double r91422 = b;
        double r91423 = r91421 / r91422;
        double r91424 = a;
        double r91425 = r91421 / r91424;
        double r91426 = r91423 + r91425;
        double r91427 = r91424 + r91422;
        double r91428 = r91427 * r91418;
        double r91429 = exp(r91428);
        double r91430 = 1.0;
        double r91431 = r91429 - r91430;
        double r91432 = r91418 * r91431;
        double r91433 = r91422 * r91418;
        double r91434 = exp(r91433);
        double r91435 = r91424 * r91418;
        double r91436 = exp(r91435);
        double r91437 = r91434 + r91436;
        double r91438 = r91430 * r91437;
        double r91439 = r91430 - r91438;
        double r91440 = r91439 + r91429;
        double r91441 = r91432 / r91440;
        double r91442 = r91420 ? r91426 : r91441;
        return r91442;
}

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

Derivation

  1. Split input into 2 regimes
  2. if eps < 5.3360736243582115e-31

    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 2.9

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

    if 5.3360736243582115e-31 < eps

    1. Initial program 50.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. Taylor expanded around inf 55.1

      \[\leadsto \color{blue}{\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} \cdot e^{\varepsilon \cdot b} + 1\right) - \left(1 \cdot e^{\varepsilon \cdot b} + 1 \cdot e^{a \cdot \varepsilon}\right)}}\]
    3. Simplified50.7

      \[\leadsto \color{blue}{\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\right) + e^{\left(a + b\right) \cdot \varepsilon}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;\varepsilon \le 5.3360736243582115 \cdot 10^{-31}:\\ \;\;\;\;\frac{1}{b} + \frac{1}{a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\right) + e^{\left(a + b\right) \cdot \varepsilon}}\\ \end{array}\]

Reproduce

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