Average Error: 60.4 → 53.4
Time: 18.4s
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 -2.3194785649155656 \cdot 10^{26} \lor \neg \left(a \le 6.5664357011814966 \cdot 10^{46}\right):\\ \;\;\;\;\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}, \left({\varepsilon}^{3} \cdot \left(b \cdot b\right)\right) \cdot {\left(\sqrt[3]{b}\right)}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\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)}\\ \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 -2.3194785649155656 \cdot 10^{26} \lor \neg \left(a \le 6.5664357011814966 \cdot 10^{46}\right):\\
\;\;\;\;\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}, \left({\varepsilon}^{3} \cdot \left(b \cdot b\right)\right) \cdot {\left(\sqrt[3]{b}\right)}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\\

\mathbf{else}:\\
\;\;\;\;\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)}\\

\end{array}
double f(double a, double b, double eps) {
        double r104531 = eps;
        double r104532 = a;
        double r104533 = b;
        double r104534 = r104532 + r104533;
        double r104535 = r104534 * r104531;
        double r104536 = exp(r104535);
        double r104537 = 1.0;
        double r104538 = r104536 - r104537;
        double r104539 = r104531 * r104538;
        double r104540 = r104532 * r104531;
        double r104541 = exp(r104540);
        double r104542 = r104541 - r104537;
        double r104543 = r104533 * r104531;
        double r104544 = exp(r104543);
        double r104545 = r104544 - r104537;
        double r104546 = r104542 * r104545;
        double r104547 = r104539 / r104546;
        return r104547;
}

double f(double a, double b, double eps) {
        double r104548 = a;
        double r104549 = -2.3194785649155656e+26;
        bool r104550 = r104548 <= r104549;
        double r104551 = 6.566435701181497e+46;
        bool r104552 = r104548 <= r104551;
        double r104553 = !r104552;
        bool r104554 = r104550 || r104553;
        double r104555 = eps;
        double r104556 = b;
        double r104557 = r104548 + r104556;
        double r104558 = r104557 * r104555;
        double r104559 = exp(r104558);
        double r104560 = 1.0;
        double r104561 = r104559 - r104560;
        double r104562 = r104555 * r104561;
        double r104563 = r104548 * r104555;
        double r104564 = exp(r104563);
        double r104565 = r104564 - r104560;
        double r104566 = 0.16666666666666666;
        double r104567 = 3.0;
        double r104568 = pow(r104555, r104567);
        double r104569 = r104556 * r104556;
        double r104570 = r104568 * r104569;
        double r104571 = cbrt(r104556);
        double r104572 = pow(r104571, r104567);
        double r104573 = r104570 * r104572;
        double r104574 = 0.5;
        double r104575 = 2.0;
        double r104576 = pow(r104555, r104575);
        double r104577 = pow(r104556, r104575);
        double r104578 = r104576 * r104577;
        double r104579 = r104556 * r104555;
        double r104580 = fma(r104574, r104578, r104579);
        double r104581 = fma(r104566, r104573, r104580);
        double r104582 = r104565 * r104581;
        double r104583 = r104562 / r104582;
        double r104584 = pow(r104548, r104567);
        double r104585 = r104584 * r104568;
        double r104586 = pow(r104548, r104575);
        double r104587 = r104586 * r104576;
        double r104588 = fma(r104574, r104587, r104563);
        double r104589 = fma(r104566, r104585, r104588);
        double r104590 = exp(r104579);
        double r104591 = r104590 - r104560;
        double r104592 = r104589 * r104591;
        double r104593 = r104562 / r104592;
        double r104594 = r104554 ? r104583 : r104593;
        return r104594;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

Original60.4
Target15.1
Herbie53.4
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 2 regimes
  2. if a < -2.3194785649155656e+26 or 6.566435701181497e+46 < a

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

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

      \[\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}, b \cdot \varepsilon\right)\right)}}\]
    4. Using strategy rm
    5. Applied add-cube-cbrt49.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(\frac{1}{6}, {\varepsilon}^{3} \cdot {\color{blue}{\left(\left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right) \cdot \sqrt[3]{b}\right)}}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\]
    6. Applied unpow-prod-down49.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(\frac{1}{6}, {\varepsilon}^{3} \cdot \color{blue}{\left({\left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right)}^{3} \cdot {\left(\sqrt[3]{b}\right)}^{3}\right)}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\]
    7. Applied associate-*r*48.3

      \[\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(\frac{1}{6}, \color{blue}{\left({\varepsilon}^{3} \cdot {\left(\sqrt[3]{b} \cdot \sqrt[3]{b}\right)}^{3}\right) \cdot {\left(\sqrt[3]{b}\right)}^{3}}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\]
    8. Simplified48.3

      \[\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(\frac{1}{6}, \color{blue}{\left({\varepsilon}^{3} \cdot \left(b \cdot b\right)\right)} \cdot {\left(\sqrt[3]{b}\right)}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\]

    if -2.3194785649155656e+26 < a < 6.566435701181497e+46

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

      \[\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.5

      \[\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)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification53.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -2.3194785649155656 \cdot 10^{26} \lor \neg \left(a \le 6.5664357011814966 \cdot 10^{46}\right):\\ \;\;\;\;\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}, \left({\varepsilon}^{3} \cdot \left(b \cdot b\right)\right) \cdot {\left(\sqrt[3]{b}\right)}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, b \cdot \varepsilon\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\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)}\\ \end{array}\]

Reproduce

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