Average Error: 60.4 → 4.8
Time: 14.8s
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)}{\log \left(e^{e^{a \cdot \varepsilon} - 1}\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\ \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)}{\log \left(e^{e^{a \cdot \varepsilon} - 1}\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\

\end{array}
double f(double a, double b, double eps) {
        double r136671 = eps;
        double r136672 = a;
        double r136673 = b;
        double r136674 = r136672 + r136673;
        double r136675 = r136674 * r136671;
        double r136676 = exp(r136675);
        double r136677 = 1.0;
        double r136678 = r136676 - r136677;
        double r136679 = r136671 * r136678;
        double r136680 = r136672 * r136671;
        double r136681 = exp(r136680);
        double r136682 = r136681 - r136677;
        double r136683 = r136673 * r136671;
        double r136684 = exp(r136683);
        double r136685 = r136684 - r136677;
        double r136686 = r136682 * r136685;
        double r136687 = r136679 / r136686;
        return r136687;
}

double f(double a, double b, double eps) {
        double r136688 = eps;
        double r136689 = 5.3360736243582115e-31;
        bool r136690 = r136688 <= r136689;
        double r136691 = 1.0;
        double r136692 = b;
        double r136693 = r136691 / r136692;
        double r136694 = a;
        double r136695 = r136691 / r136694;
        double r136696 = r136693 + r136695;
        double r136697 = r136694 + r136692;
        double r136698 = r136697 * r136688;
        double r136699 = exp(r136698);
        double r136700 = 1.0;
        double r136701 = r136699 - r136700;
        double r136702 = r136688 * r136701;
        double r136703 = r136694 * r136688;
        double r136704 = exp(r136703);
        double r136705 = r136704 - r136700;
        double r136706 = exp(r136705);
        double r136707 = log(r136706);
        double r136708 = r136692 * r136688;
        double r136709 = exp(r136708);
        double r136710 = r136709 - r136700;
        double r136711 = r136707 * r136710;
        double r136712 = r136702 / r136711;
        double r136713 = r136690 ? r136696 : r136712;
        return r136713;
}

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. Using strategy rm
    3. Applied add-log-exp50.7

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - \color{blue}{\log \left(e^{1}\right)}\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
    4. Applied add-log-exp50.7

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\color{blue}{\log \left(e^{e^{a \cdot \varepsilon}}\right)} - \log \left(e^{1}\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
    5. Applied diff-log50.7

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

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

Reproduce

herbie shell --seed 2020046 +o rules:numerics
(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))))