Average Error: 60.3 → 52.3
Time: 30.3s
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 -7.755384029378696343575688420881066759931 \cdot 10^{176}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(b, \varepsilon, b \cdot \left(b \cdot \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)\right)}\\ \mathbf{elif}\;a \le -5.831284548290567253917133279792100635835 \cdot 10^{81}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(\sqrt{e^{a \cdot \varepsilon}}, \sqrt{e^{a \cdot \varepsilon}}, -1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\ \mathbf{elif}\;a \le 11675070506728611840:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(a, \varepsilon, {\varepsilon}^{2} \cdot \left(\frac{1}{2} \cdot {a}^{2} + \left(\frac{1}{6} \cdot {a}^{3}\right) \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(b, \varepsilon, b \cdot \left(b \cdot \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\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 -7.755384029378696343575688420881066759931 \cdot 10^{176}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(b, \varepsilon, b \cdot \left(b \cdot \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)\right)}\\

\mathbf{elif}\;a \le -5.831284548290567253917133279792100635835 \cdot 10^{81}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(\sqrt{e^{a \cdot \varepsilon}}, \sqrt{e^{a \cdot \varepsilon}}, -1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\

\mathbf{elif}\;a \le 11675070506728611840:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(a, \varepsilon, {\varepsilon}^{2} \cdot \left(\frac{1}{2} \cdot {a}^{2} + \left(\frac{1}{6} \cdot {a}^{3}\right) \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(b, \varepsilon, b \cdot \left(b \cdot \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)\right)}\\

\end{array}
double f(double a, double b, double eps) {
        double r76320 = eps;
        double r76321 = a;
        double r76322 = b;
        double r76323 = r76321 + r76322;
        double r76324 = r76323 * r76320;
        double r76325 = exp(r76324);
        double r76326 = 1.0;
        double r76327 = r76325 - r76326;
        double r76328 = r76320 * r76327;
        double r76329 = r76321 * r76320;
        double r76330 = exp(r76329);
        double r76331 = r76330 - r76326;
        double r76332 = r76322 * r76320;
        double r76333 = exp(r76332);
        double r76334 = r76333 - r76326;
        double r76335 = r76331 * r76334;
        double r76336 = r76328 / r76335;
        return r76336;
}

double f(double a, double b, double eps) {
        double r76337 = a;
        double r76338 = -7.755384029378696e+176;
        bool r76339 = r76337 <= r76338;
        double r76340 = eps;
        double r76341 = b;
        double r76342 = r76337 + r76341;
        double r76343 = r76342 * r76340;
        double r76344 = exp(r76343);
        double r76345 = 1.0;
        double r76346 = r76344 - r76345;
        double r76347 = r76340 * r76346;
        double r76348 = r76337 * r76340;
        double r76349 = exp(r76348);
        double r76350 = r76349 - r76345;
        double r76351 = 0.5;
        double r76352 = 2.0;
        double r76353 = pow(r76340, r76352);
        double r76354 = 0.16666666666666666;
        double r76355 = 3.0;
        double r76356 = pow(r76340, r76355);
        double r76357 = r76354 * r76356;
        double r76358 = r76357 * r76341;
        double r76359 = fma(r76351, r76353, r76358);
        double r76360 = r76341 * r76359;
        double r76361 = r76341 * r76360;
        double r76362 = fma(r76341, r76340, r76361);
        double r76363 = r76350 * r76362;
        double r76364 = r76347 / r76363;
        double r76365 = -5.831284548290567e+81;
        bool r76366 = r76337 <= r76365;
        double r76367 = sqrt(r76349);
        double r76368 = -r76345;
        double r76369 = fma(r76367, r76367, r76368);
        double r76370 = r76341 * r76340;
        double r76371 = exp(r76370);
        double r76372 = r76371 - r76345;
        double r76373 = r76369 * r76372;
        double r76374 = r76347 / r76373;
        double r76375 = 1.1675070506728612e+19;
        bool r76376 = r76337 <= r76375;
        double r76377 = pow(r76337, r76352);
        double r76378 = r76351 * r76377;
        double r76379 = pow(r76337, r76355);
        double r76380 = r76354 * r76379;
        double r76381 = r76380 * r76340;
        double r76382 = r76378 + r76381;
        double r76383 = r76353 * r76382;
        double r76384 = fma(r76337, r76340, r76383);
        double r76385 = r76384 * r76372;
        double r76386 = r76347 / r76385;
        double r76387 = r76376 ? r76386 : r76364;
        double r76388 = r76366 ? r76374 : r76387;
        double r76389 = r76339 ? r76364 : r76388;
        return r76389;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

Original60.3
Target14.3
Herbie52.3
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 3 regimes
  2. if a < -7.755384029378696e+176 or 1.1675070506728612e+19 < a

    1. Initial program 54.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 47.4

      \[\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. Simplified44.4

      \[\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(b, \varepsilon, {b}^{2} \cdot \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)}}\]
    4. Using strategy rm
    5. Applied sqr-pow44.4

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(b, \varepsilon, \color{blue}{\left({b}^{\left(\frac{2}{2}\right)} \cdot {b}^{\left(\frac{2}{2}\right)}\right)} \cdot \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)}\]
    6. Applied associate-*l*43.1

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(b, \varepsilon, \color{blue}{{b}^{\left(\frac{2}{2}\right)} \cdot \left({b}^{\left(\frac{2}{2}\right)} \cdot \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)}\right)}\]
    7. Simplified43.1

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

    if -7.755384029378696e+176 < a < -5.831284548290567e+81

    1. Initial program 55.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 add-sqr-sqrt55.9

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\color{blue}{\sqrt{e^{a \cdot \varepsilon}} \cdot \sqrt{e^{a \cdot \varepsilon}}} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
    4. Applied fma-neg55.9

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

    if -5.831284548290567e+81 < a < 1.1675070506728612e+19

    1. Initial program 63.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 0 56.1

      \[\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. Simplified56.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -7.755384029378696343575688420881066759931 \cdot 10^{176}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(b, \varepsilon, b \cdot \left(b \cdot \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)\right)}\\ \mathbf{elif}\;a \le -5.831284548290567253917133279792100635835 \cdot 10^{81}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(\sqrt{e^{a \cdot \varepsilon}}, \sqrt{e^{a \cdot \varepsilon}}, -1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\ \mathbf{elif}\;a \le 11675070506728611840:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\mathsf{fma}\left(a, \varepsilon, {\varepsilon}^{2} \cdot \left(\frac{1}{2} \cdot {a}^{2} + \left(\frac{1}{6} \cdot {a}^{3}\right) \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(b, \varepsilon, b \cdot \left(b \cdot \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)\right)}\\ \end{array}\]

Reproduce

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