Average Error: 60.2 → 53.7
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.969337513991444315376627752626075518669 \cdot 10^{72} \lor \neg \left(a \le 9.71614083792645651101853201912203907943 \cdot 10^{126}\right):\\ \;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(\frac{1}{6}, \left({\varepsilon}^{3} \cdot b\right) \cdot \left(b \cdot b\right), \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\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 -1.969337513991444315376627752626075518669 \cdot 10^{72} \lor \neg \left(a \le 9.71614083792645651101853201912203907943 \cdot 10^{126}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(\frac{1}{6}, \left({\varepsilon}^{3} \cdot b\right) \cdot \left(b \cdot b\right), \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\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 r112095 = eps;
        double r112096 = a;
        double r112097 = b;
        double r112098 = r112096 + r112097;
        double r112099 = r112098 * r112095;
        double r112100 = exp(r112099);
        double r112101 = 1.0;
        double r112102 = r112100 - r112101;
        double r112103 = r112095 * r112102;
        double r112104 = r112096 * r112095;
        double r112105 = exp(r112104);
        double r112106 = r112105 - r112101;
        double r112107 = r112097 * r112095;
        double r112108 = exp(r112107);
        double r112109 = r112108 - r112101;
        double r112110 = r112106 * r112109;
        double r112111 = r112103 / r112110;
        return r112111;
}

double f(double a, double b, double eps) {
        double r112112 = a;
        double r112113 = -1.9693375139914443e+72;
        bool r112114 = r112112 <= r112113;
        double r112115 = 9.716140837926457e+126;
        bool r112116 = r112112 <= r112115;
        double r112117 = !r112116;
        bool r112118 = r112114 || r112117;
        double r112119 = eps;
        double r112120 = b;
        double r112121 = r112112 + r112120;
        double r112122 = r112121 * r112119;
        double r112123 = exp(r112122);
        double r112124 = 1.0;
        double r112125 = r112123 - r112124;
        double r112126 = 3.0;
        double r112127 = pow(r112125, r112126);
        double r112128 = cbrt(r112127);
        double r112129 = r112119 * r112128;
        double r112130 = r112112 * r112119;
        double r112131 = exp(r112130);
        double r112132 = r112131 - r112124;
        double r112133 = 0.16666666666666666;
        double r112134 = pow(r112119, r112126);
        double r112135 = r112134 * r112120;
        double r112136 = r112120 * r112120;
        double r112137 = r112135 * r112136;
        double r112138 = 0.5;
        double r112139 = 2.0;
        double r112140 = pow(r112119, r112139);
        double r112141 = pow(r112120, r112139);
        double r112142 = r112140 * r112141;
        double r112143 = r112119 * r112120;
        double r112144 = fma(r112138, r112142, r112143);
        double r112145 = fma(r112133, r112137, r112144);
        double r112146 = r112132 * r112145;
        double r112147 = r112129 / r112146;
        double r112148 = r112119 * r112125;
        double r112149 = pow(r112112, r112126);
        double r112150 = r112149 * r112134;
        double r112151 = pow(r112112, r112139);
        double r112152 = r112151 * r112140;
        double r112153 = fma(r112138, r112152, r112130);
        double r112154 = fma(r112133, r112150, r112153);
        double r112155 = r112120 * r112119;
        double r112156 = exp(r112155);
        double r112157 = r112156 - r112124;
        double r112158 = r112154 * r112157;
        double r112159 = r112148 / r112158;
        double r112160 = r112118 ? r112147 : r112159;
        return r112160;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

Original60.2
Target14.9
Herbie53.7
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 2 regimes
  2. if a < -1.9693375139914443e+72 or 9.716140837926457e+126 < a

    1. Initial program 52.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. Taylor expanded around 0 46.9

      \[\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. Simplified46.9

      \[\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)}}\]
    4. Using strategy rm
    5. Applied cube-mult46.9

      \[\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(b \cdot \left(b \cdot b\right)\right)}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\]
    6. Applied associate-*r*46.0

      \[\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 b\right) \cdot \left(b \cdot b\right)}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\]
    7. Using strategy rm
    8. Applied add-cbrt-cube46.1

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

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

    if -1.9693375139914443e+72 < a < 9.716140837926457e+126

    1. Initial program 63.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -1.969337513991444315376627752626075518669 \cdot 10^{72} \lor \neg \left(a \le 9.71614083792645651101853201912203907943 \cdot 10^{126}\right):\\ \;\;\;\;\frac{\varepsilon \cdot \sqrt[3]{{\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}^{3}}}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \mathsf{fma}\left(\frac{1}{6}, \left({\varepsilon}^{3} \cdot b\right) \cdot \left(b \cdot b\right), \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\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 2020001 +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))))