Average Error: 60.3 → 54.0
Time: 13.1s
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{\mathsf{fma}\left(-1, 1, {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}\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)}{\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {\varepsilon}^{3}, \mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {\varepsilon}^{2}, 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 \mathsf{fma}\left(\frac{1}{6}, {\varepsilon}^{3} \cdot {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \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{\mathsf{fma}\left(-1, 1, {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}\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)}{\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {\varepsilon}^{3}, \mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {\varepsilon}^{2}, 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 \mathsf{fma}\left(\frac{1}{6}, {\varepsilon}^{3} \cdot {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\

\end{array}
double f(double a, double b, double eps) {
        double r112276 = eps;
        double r112277 = a;
        double r112278 = b;
        double r112279 = r112277 + r112278;
        double r112280 = r112279 * r112276;
        double r112281 = exp(r112280);
        double r112282 = 1.0;
        double r112283 = r112281 - r112282;
        double r112284 = r112276 * r112283;
        double r112285 = r112277 * r112276;
        double r112286 = exp(r112285);
        double r112287 = r112286 - r112282;
        double r112288 = r112278 * r112276;
        double r112289 = exp(r112288);
        double r112290 = r112289 - r112282;
        double r112291 = r112287 * r112290;
        double r112292 = r112284 / r112291;
        return r112292;
}

double f(double a, double b, double eps) {
        double r112293 = a;
        double r112294 = -1.0320051143206996e+110;
        bool r112295 = r112293 <= r112294;
        double r112296 = eps;
        double r112297 = b;
        double r112298 = r112293 + r112297;
        double r112299 = r112298 * r112296;
        double r112300 = exp(r112299);
        double r112301 = 1.0;
        double r112302 = r112300 - r112301;
        double r112303 = r112296 * r112302;
        double r112304 = r112293 * r112296;
        double r112305 = exp(r112304);
        double r112306 = r112305 - r112301;
        double r112307 = -r112301;
        double r112308 = exp(r112297);
        double r112309 = 2.0;
        double r112310 = r112309 * r112296;
        double r112311 = pow(r112308, r112310);
        double r112312 = fma(r112307, r112301, r112311);
        double r112313 = r112297 * r112296;
        double r112314 = exp(r112313);
        double r112315 = r112314 + r112301;
        double r112316 = r112312 / r112315;
        double r112317 = r112306 * r112316;
        double r112318 = r112303 / r112317;
        double r112319 = 1.6045903834141747e+73;
        bool r112320 = r112293 <= r112319;
        double r112321 = 0.16666666666666666;
        double r112322 = 3.0;
        double r112323 = pow(r112293, r112322);
        double r112324 = pow(r112296, r112322);
        double r112325 = r112323 * r112324;
        double r112326 = 0.5;
        double r112327 = pow(r112293, r112309);
        double r112328 = pow(r112296, r112309);
        double r112329 = r112327 * r112328;
        double r112330 = fma(r112326, r112329, r112304);
        double r112331 = fma(r112321, r112325, r112330);
        double r112332 = r112314 - r112301;
        double r112333 = r112331 * r112332;
        double r112334 = r112303 / r112333;
        double r112335 = pow(r112297, r112322);
        double r112336 = r112324 * r112335;
        double r112337 = pow(r112297, r112309);
        double r112338 = r112328 * r112337;
        double r112339 = r112296 * r112297;
        double r112340 = fma(r112326, r112338, r112339);
        double r112341 = fma(r112321, r112336, r112340);
        double r112342 = r112306 * r112341;
        double r112343 = r112303 / r112342;
        double r112344 = r112320 ? r112334 : r112343;
        double r112345 = r112295 ? r112318 : r112344;
        return r112345;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

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}{\mathsf{fma}\left(-1, 1, {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}\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)}\]
    3. Simplified55.8

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\color{blue}{\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {\varepsilon}^{3}, \mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {\varepsilon}^{2}, 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. Simplified45.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}{\mathsf{fma}\left(\frac{1}{6}, {\varepsilon}^{3} \cdot {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \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{\mathsf{fma}\left(-1, 1, {\left(e^{b}\right)}^{\left(2 \cdot \varepsilon\right)}\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)}{\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {\varepsilon}^{3}, \mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {\varepsilon}^{2}, 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 \mathsf{fma}\left(\frac{1}{6}, {\varepsilon}^{3} \cdot {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\ \end{array}\]

Reproduce

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