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

\end{array}
double f(double a, double b, double eps) {
        double r83939 = eps;
        double r83940 = a;
        double r83941 = b;
        double r83942 = r83940 + r83941;
        double r83943 = r83942 * r83939;
        double r83944 = exp(r83943);
        double r83945 = 1.0;
        double r83946 = r83944 - r83945;
        double r83947 = r83939 * r83946;
        double r83948 = r83940 * r83939;
        double r83949 = exp(r83948);
        double r83950 = r83949 - r83945;
        double r83951 = r83941 * r83939;
        double r83952 = exp(r83951);
        double r83953 = r83952 - r83945;
        double r83954 = r83950 * r83953;
        double r83955 = r83947 / r83954;
        return r83955;
}

double f(double a, double b, double eps) {
        double r83956 = eps;
        double r83957 = 5.3360736243582115e-31;
        bool r83958 = r83956 <= r83957;
        double r83959 = 1.0;
        double r83960 = b;
        double r83961 = r83959 / r83960;
        double r83962 = a;
        double r83963 = r83959 / r83962;
        double r83964 = r83961 + r83963;
        double r83965 = r83962 + r83960;
        double r83966 = r83965 * r83956;
        double r83967 = exp(r83966);
        double r83968 = 1.0;
        double r83969 = r83967 - r83968;
        double r83970 = r83956 * r83969;
        double r83971 = r83960 * r83956;
        double r83972 = exp(r83971);
        double r83973 = r83962 * r83956;
        double r83974 = exp(r83973);
        double r83975 = r83972 + r83974;
        double r83976 = r83968 * r83975;
        double r83977 = r83968 - r83976;
        double r83978 = r83967 + r83977;
        double r83979 = r83970 / r83978;
        double r83980 = r83958 ? r83964 : r83979;
        return r83980;
}

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)}{e^{\left(a + b\right) \cdot \varepsilon} + \left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\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)}{e^{\left(a + b\right) \cdot \varepsilon} + \left(1 - 1 \cdot \left(e^{b \cdot \varepsilon} + e^{a \cdot \varepsilon}\right)\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))))