Average Error: 58.7 → 3.3
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)}\]
\[\begin{array}{l} \mathbf{if}\;b \le -4.075922636405056 \cdot 10^{+263}:\\ \;\;\;\;\frac{(e^{\left(a + b\right) \cdot \varepsilon} - 1)^* \cdot \varepsilon}{(e^{a \cdot \varepsilon} - 1)^*} \cdot \frac{1}{(e^{\varepsilon \cdot b} - 1)^*}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{a} + \frac{1}{b}\\ \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}\;b \le -4.075922636405056 \cdot 10^{+263}:\\
\;\;\;\;\frac{(e^{\left(a + b\right) \cdot \varepsilon} - 1)^* \cdot \varepsilon}{(e^{a \cdot \varepsilon} - 1)^*} \cdot \frac{1}{(e^{\varepsilon \cdot b} - 1)^*}\\

\mathbf{else}:\\
\;\;\;\;\frac{1}{a} + \frac{1}{b}\\

\end{array}
double f(double a, double b, double eps) {
        double r6593453 = eps;
        double r6593454 = a;
        double r6593455 = b;
        double r6593456 = r6593454 + r6593455;
        double r6593457 = r6593456 * r6593453;
        double r6593458 = exp(r6593457);
        double r6593459 = 1.0;
        double r6593460 = r6593458 - r6593459;
        double r6593461 = r6593453 * r6593460;
        double r6593462 = r6593454 * r6593453;
        double r6593463 = exp(r6593462);
        double r6593464 = r6593463 - r6593459;
        double r6593465 = r6593455 * r6593453;
        double r6593466 = exp(r6593465);
        double r6593467 = r6593466 - r6593459;
        double r6593468 = r6593464 * r6593467;
        double r6593469 = r6593461 / r6593468;
        return r6593469;
}

double f(double a, double b, double eps) {
        double r6593470 = b;
        double r6593471 = -4.075922636405056e+263;
        bool r6593472 = r6593470 <= r6593471;
        double r6593473 = a;
        double r6593474 = r6593473 + r6593470;
        double r6593475 = eps;
        double r6593476 = r6593474 * r6593475;
        double r6593477 = expm1(r6593476);
        double r6593478 = r6593477 * r6593475;
        double r6593479 = r6593473 * r6593475;
        double r6593480 = expm1(r6593479);
        double r6593481 = r6593478 / r6593480;
        double r6593482 = 1.0;
        double r6593483 = r6593475 * r6593470;
        double r6593484 = expm1(r6593483);
        double r6593485 = r6593482 / r6593484;
        double r6593486 = r6593481 * r6593485;
        double r6593487 = r6593482 / r6593473;
        double r6593488 = r6593482 / r6593470;
        double r6593489 = r6593487 + r6593488;
        double r6593490 = r6593472 ? r6593486 : r6593489;
        return r6593490;
}

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

Derivation

  1. Split input into 2 regimes
  2. if b < -4.075922636405056e+263

    1. Initial program 44.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. Simplified18.0

      \[\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. Using strategy rm
    4. Applied div-inv18.0

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

    if -4.075922636405056e+263 < b

    1. Initial program 59.0

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

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

      \[\leadsto \color{blue}{\frac{1}{a} + \frac{1}{b}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.3

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

Reproduce

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