Average Error: 60.3 → 54.0
Time: 12.7s
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}\;a \le -1.0320051143206995951819976248147559254 \cdot 10^{110}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \frac{\left(-1 \cdot 1\right) + {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}}{e^{b \cdot \varepsilon} + 1}}\\ \mathbf{elif}\;a \le 1.604590383414174745639109777851955666043 \cdot 10^{73}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\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)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left({\varepsilon}^{3} \cdot {b}^{3}\right) + \left(\frac{1}{2} \cdot \left({\varepsilon}^{2} \cdot {b}^{2}\right) + \varepsilon \cdot b\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}\;a \le -1.0320051143206995951819976248147559254 \cdot 10^{110}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \frac{\left(-1 \cdot 1\right) + {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}}{e^{b \cdot \varepsilon} + 1}}\\

\mathbf{elif}\;a \le 1.604590383414174745639109777851955666043 \cdot 10^{73}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\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)}\\

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

\end{array}
double f(double a, double b, double eps) {
        double r107039 = eps;
        double r107040 = a;
        double r107041 = b;
        double r107042 = r107040 + r107041;
        double r107043 = r107042 * r107039;
        double r107044 = exp(r107043);
        double r107045 = 1.0;
        double r107046 = r107044 - r107045;
        double r107047 = r107039 * r107046;
        double r107048 = r107040 * r107039;
        double r107049 = exp(r107048);
        double r107050 = r107049 - r107045;
        double r107051 = r107041 * r107039;
        double r107052 = exp(r107051);
        double r107053 = r107052 - r107045;
        double r107054 = r107050 * r107053;
        double r107055 = r107047 / r107054;
        return r107055;
}

double f(double a, double b, double eps) {
        double r107056 = a;
        double r107057 = -1.0320051143206996e+110;
        bool r107058 = r107056 <= r107057;
        double r107059 = eps;
        double r107060 = b;
        double r107061 = r107056 + r107060;
        double r107062 = r107061 * r107059;
        double r107063 = exp(r107062);
        double r107064 = 1.0;
        double r107065 = r107063 - r107064;
        double r107066 = r107059 * r107065;
        double r107067 = r107056 * r107059;
        double r107068 = exp(r107067);
        double r107069 = r107068 - r107064;
        double r107070 = r107064 * r107064;
        double r107071 = -r107070;
        double r107072 = exp(r107060);
        double r107073 = 2.0;
        double r107074 = r107073 * r107059;
        double r107075 = pow(r107072, r107074);
        double r107076 = r107071 + r107075;
        double r107077 = r107060 * r107059;
        double r107078 = exp(r107077);
        double r107079 = r107078 + r107064;
        double r107080 = r107076 / r107079;
        double r107081 = r107069 * r107080;
        double r107082 = r107066 / r107081;
        double r107083 = 1.6045903834141747e+73;
        bool r107084 = r107056 <= r107083;
        double r107085 = 0.16666666666666666;
        double r107086 = 3.0;
        double r107087 = pow(r107056, r107086);
        double r107088 = pow(r107059, r107086);
        double r107089 = r107087 * r107088;
        double r107090 = r107085 * r107089;
        double r107091 = 0.5;
        double r107092 = pow(r107056, r107073);
        double r107093 = pow(r107059, r107073);
        double r107094 = r107092 * r107093;
        double r107095 = r107091 * r107094;
        double r107096 = r107095 + r107067;
        double r107097 = r107090 + r107096;
        double r107098 = r107078 - r107064;
        double r107099 = r107097 * r107098;
        double r107100 = r107066 / r107099;
        double r107101 = pow(r107060, r107086);
        double r107102 = r107088 * r107101;
        double r107103 = r107085 * r107102;
        double r107104 = pow(r107060, r107073);
        double r107105 = r107093 * r107104;
        double r107106 = r107091 * r107105;
        double r107107 = r107059 * r107060;
        double r107108 = r107106 + r107107;
        double r107109 = r107103 + r107108;
        double r107110 = r107069 * r107109;
        double r107111 = r107066 / r107110;
        double r107112 = r107084 ? r107100 : r107111;
        double r107113 = r107058 ? r107082 : r107112;
        return r107113;
}

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

Derivation

  1. Split input into 3 regimes
  2. if a < -1.0320051143206996e+110

    1. Initial program 51.9

      \[\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 flip--55.2

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

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

    if -1.0320051143206996e+110 < a < 1.6045903834141747e+73

    1. Initial program 63.2

      \[\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 55.8

      \[\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)}\]

    if 1.6045903834141747e+73 < a

    1. Initial program 54.6

      \[\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 45.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -1.0320051143206995951819976248147559254 \cdot 10^{110}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \frac{\left(-1 \cdot 1\right) + {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}}{e^{b \cdot \varepsilon} + 1}}\\ \mathbf{elif}\;a \le 1.604590383414174745639109777851955666043 \cdot 10^{73}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\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)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\frac{1}{6} \cdot \left({\varepsilon}^{3} \cdot {b}^{3}\right) + \left(\frac{1}{2} \cdot \left({\varepsilon}^{2} \cdot {b}^{2}\right) + \varepsilon \cdot b\right)\right)}\\ \end{array}\]

Reproduce

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