Average Error: 60.4 → 52.4
Time: 33.0s
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.267206889411900362902984551665439281678 \cdot 10^{79}:\\ \;\;\;\;\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 2.099495629580950168918988196696082401256 \cdot 10^{101}:\\ \;\;\;\;\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 \mathsf{expm1}\left(\mathsf{log1p}\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)\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 -1.267206889411900362902984551665439281678 \cdot 10^{79}:\\
\;\;\;\;\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 2.099495629580950168918988196696082401256 \cdot 10^{101}:\\
\;\;\;\;\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 \mathsf{expm1}\left(\mathsf{log1p}\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)\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 r87016 = eps;
        double r87017 = a;
        double r87018 = b;
        double r87019 = r87017 + r87018;
        double r87020 = r87019 * r87016;
        double r87021 = exp(r87020);
        double r87022 = 1.0;
        double r87023 = r87021 - r87022;
        double r87024 = r87016 * r87023;
        double r87025 = r87017 * r87016;
        double r87026 = exp(r87025);
        double r87027 = r87026 - r87022;
        double r87028 = r87018 * r87016;
        double r87029 = exp(r87028);
        double r87030 = r87029 - r87022;
        double r87031 = r87027 * r87030;
        double r87032 = r87024 / r87031;
        return r87032;
}

double f(double a, double b, double eps) {
        double r87033 = a;
        double r87034 = -1.2672068894119004e+79;
        bool r87035 = r87033 <= r87034;
        double r87036 = eps;
        double r87037 = b;
        double r87038 = r87033 + r87037;
        double r87039 = r87038 * r87036;
        double r87040 = exp(r87039);
        double r87041 = 1.0;
        double r87042 = r87040 - r87041;
        double r87043 = r87036 * r87042;
        double r87044 = r87033 * r87036;
        double r87045 = exp(r87044);
        double r87046 = r87045 - r87041;
        double r87047 = 0.5;
        double r87048 = 2.0;
        double r87049 = pow(r87036, r87048);
        double r87050 = 0.16666666666666666;
        double r87051 = 3.0;
        double r87052 = pow(r87036, r87051);
        double r87053 = r87050 * r87052;
        double r87054 = r87053 * r87037;
        double r87055 = fma(r87047, r87049, r87054);
        double r87056 = r87037 * r87055;
        double r87057 = r87037 * r87056;
        double r87058 = fma(r87037, r87036, r87057);
        double r87059 = r87046 * r87058;
        double r87060 = r87043 / r87059;
        double r87061 = 2.0994956295809502e+101;
        bool r87062 = r87033 <= r87061;
        double r87063 = pow(r87033, r87048);
        double r87064 = r87047 * r87063;
        double r87065 = pow(r87033, r87051);
        double r87066 = r87050 * r87065;
        double r87067 = r87066 * r87036;
        double r87068 = r87064 + r87067;
        double r87069 = r87049 * r87068;
        double r87070 = fma(r87033, r87036, r87069);
        double r87071 = r87037 * r87036;
        double r87072 = exp(r87071);
        double r87073 = r87072 - r87041;
        double r87074 = r87070 * r87073;
        double r87075 = r87043 / r87074;
        double r87076 = log1p(r87042);
        double r87077 = expm1(r87076);
        double r87078 = r87036 * r87077;
        double r87079 = r87078 / r87059;
        double r87080 = r87062 ? r87075 : r87079;
        double r87081 = r87035 ? r87060 : r87080;
        return r87081;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

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

Derivation

  1. Split input into 3 regimes
  2. if a < -1.2672068894119004e+79

    1. Initial program 53.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.3

      \[\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. Simplified43.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 unpow243.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 \cdot b\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*42.5

      \[\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 \cdot \left(b \cdot \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)}\right)}\]
    7. Simplified42.5

      \[\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 \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 -1.2672068894119004e+79 < a < 2.0994956295809502e+101

    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 56.4

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

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

    if 2.0994956295809502e+101 < a

    1. Initial program 53.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 46.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)}}\]
    3. Simplified44.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(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 unpow244.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}{\left(b \cdot b\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*42.6

      \[\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 \cdot \left(b \cdot \left(\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)\right)}\right)}\]
    7. Simplified42.6

      \[\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 \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)}\]
    8. Using strategy rm
    9. Applied expm1-log1p-u42.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -1.267206889411900362902984551665439281678 \cdot 10^{79}:\\ \;\;\;\;\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 2.099495629580950168918988196696082401256 \cdot 10^{101}:\\ \;\;\;\;\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 \mathsf{expm1}\left(\mathsf{log1p}\left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)\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 2019325 +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))))