Average Error: 60.2 → 52.8
Time: 28.5s
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}\;b \le -8.567098253796798289657281504730612089987 \cdot 10^{120} \lor \neg \left(b \le 0.2147503712635026318356068486536969430745\right):\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot {\left(a \cdot \varepsilon\right)}^{3} + \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}\;b \le -8.567098253796798289657281504730612089987 \cdot 10^{120} \lor \neg \left(b \le 0.2147503712635026318356068486536969430745\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot {\left(a \cdot \varepsilon\right)}^{3} + \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 r97403 = eps;
        double r97404 = a;
        double r97405 = b;
        double r97406 = r97404 + r97405;
        double r97407 = r97406 * r97403;
        double r97408 = exp(r97407);
        double r97409 = 1.0;
        double r97410 = r97408 - r97409;
        double r97411 = r97403 * r97410;
        double r97412 = r97404 * r97403;
        double r97413 = exp(r97412);
        double r97414 = r97413 - r97409;
        double r97415 = r97405 * r97403;
        double r97416 = exp(r97415);
        double r97417 = r97416 - r97409;
        double r97418 = r97414 * r97417;
        double r97419 = r97411 / r97418;
        return r97419;
}

double f(double a, double b, double eps) {
        double r97420 = b;
        double r97421 = -8.567098253796798e+120;
        bool r97422 = r97420 <= r97421;
        double r97423 = 0.21475037126350263;
        bool r97424 = r97420 <= r97423;
        double r97425 = !r97424;
        bool r97426 = r97422 || r97425;
        double r97427 = eps;
        double r97428 = a;
        double r97429 = r97428 + r97420;
        double r97430 = r97429 * r97427;
        double r97431 = exp(r97430);
        double r97432 = 1.0;
        double r97433 = r97431 - r97432;
        double r97434 = r97427 * r97433;
        double r97435 = 0.16666666666666666;
        double r97436 = r97428 * r97427;
        double r97437 = 3.0;
        double r97438 = pow(r97436, r97437);
        double r97439 = r97435 * r97438;
        double r97440 = 0.5;
        double r97441 = 2.0;
        double r97442 = pow(r97428, r97441);
        double r97443 = pow(r97427, r97441);
        double r97444 = r97442 * r97443;
        double r97445 = r97440 * r97444;
        double r97446 = r97445 + r97436;
        double r97447 = r97439 + r97446;
        double r97448 = r97420 * r97427;
        double r97449 = exp(r97448);
        double r97450 = r97449 - r97432;
        double r97451 = r97447 * r97450;
        double r97452 = r97434 / r97451;
        double r97453 = exp(r97436);
        double r97454 = r97453 - r97432;
        double r97455 = pow(r97427, r97437);
        double r97456 = pow(r97420, r97437);
        double r97457 = r97455 * r97456;
        double r97458 = r97435 * r97457;
        double r97459 = pow(r97420, r97441);
        double r97460 = r97443 * r97459;
        double r97461 = r97440 * r97460;
        double r97462 = r97427 * r97420;
        double r97463 = r97461 + r97462;
        double r97464 = r97458 + r97463;
        double r97465 = r97454 * r97464;
        double r97466 = r97434 / r97465;
        double r97467 = r97426 ? r97452 : r97466;
        return r97467;
}

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.2
Target14.8
Herbie52.8
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -8.567098253796798e+120

    1. Initial program 52.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 43.9

      \[\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. Using strategy rm
    4. Applied add-cbrt-cube43.9

      \[\leadsto \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 \color{blue}{\sqrt[3]{\left(\left(e^{b \cdot \varepsilon} - 1\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}}}\]
    5. Simplified43.9

      \[\leadsto \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 \sqrt[3]{\color{blue}{{\left(e^{\varepsilon \cdot b} - 1\right)}^{3}}}}\]

    if -8.567098253796798e+120 < b < 0.21475037126350263

    1. Initial program 63.4

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

    if 0.21475037126350263 < b

    1. Initial program 55.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 51.0

      \[\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. Using strategy rm
    4. Applied pow-prod-down49.6

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot \color{blue}{{\left(a \cdot \varepsilon\right)}^{3}} + \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. Recombined 3 regimes into one program.
  4. Final simplification52.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -8.567098253796798289657281504730612089987 \cdot 10^{120} \lor \neg \left(b \le 0.2147503712635026318356068486536969430745\right):\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\frac{1}{6} \cdot {\left(a \cdot \varepsilon\right)}^{3} + \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 2019297 
(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))))