Average Error: 60.4 → 52.9
Time: 33.6s
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.386196348344972242970976545867568916909 \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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)\right)}\\ \mathbf{elif}\;a \le 2.610255663969723268136549668862625934183 \cdot 10^{104}:\\ \;\;\;\;\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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|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.386196348344972242970976545867568916909 \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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)\right)}\\

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

\end{array}
double f(double a, double b, double eps) {
        double r89821 = eps;
        double r89822 = a;
        double r89823 = b;
        double r89824 = r89822 + r89823;
        double r89825 = r89824 * r89821;
        double r89826 = exp(r89825);
        double r89827 = 1.0;
        double r89828 = r89826 - r89827;
        double r89829 = r89821 * r89828;
        double r89830 = r89822 * r89821;
        double r89831 = exp(r89830);
        double r89832 = r89831 - r89827;
        double r89833 = r89823 * r89821;
        double r89834 = exp(r89833);
        double r89835 = r89834 - r89827;
        double r89836 = r89832 * r89835;
        double r89837 = r89829 / r89836;
        return r89837;
}

double f(double a, double b, double eps) {
        double r89838 = a;
        double r89839 = -1.3861963483449722e+79;
        bool r89840 = r89838 <= r89839;
        double r89841 = eps;
        double r89842 = b;
        double r89843 = r89838 + r89842;
        double r89844 = r89843 * r89841;
        double r89845 = exp(r89844);
        double r89846 = 1.0;
        double r89847 = r89845 - r89846;
        double r89848 = r89841 * r89847;
        double r89849 = r89838 * r89841;
        double r89850 = exp(r89849);
        double r89851 = r89850 - r89846;
        double r89852 = 0.5;
        double r89853 = 2.0;
        double r89854 = pow(r89841, r89853);
        double r89855 = 0.16666666666666666;
        double r89856 = 3.0;
        double r89857 = pow(r89841, r89856);
        double r89858 = r89855 * r89857;
        double r89859 = r89858 * r89842;
        double r89860 = fma(r89852, r89854, r89859);
        double r89861 = sqrt(r89860);
        double r89862 = fabs(r89842);
        double r89863 = r89861 * r89862;
        double r89864 = r89863 * r89863;
        double r89865 = fma(r89842, r89841, r89864);
        double r89866 = r89851 * r89865;
        double r89867 = r89848 / r89866;
        double r89868 = 2.6102556639697233e+104;
        bool r89869 = r89838 <= r89868;
        double r89870 = pow(r89838, r89853);
        double r89871 = r89852 * r89870;
        double r89872 = pow(r89838, r89856);
        double r89873 = r89855 * r89872;
        double r89874 = r89873 * r89841;
        double r89875 = r89871 + r89874;
        double r89876 = r89854 * r89875;
        double r89877 = fma(r89838, r89841, r89876);
        double r89878 = r89842 * r89841;
        double r89879 = exp(r89878);
        double r89880 = r89879 - r89846;
        double r89881 = r89877 * r89880;
        double r89882 = r89848 / r89881;
        double r89883 = log1p(r89847);
        double r89884 = expm1(r89883);
        double r89885 = r89841 * r89884;
        double r89886 = r89885 / r89866;
        double r89887 = r89869 ? r89882 : r89886;
        double r89888 = r89840 ? r89867 : r89887;
        return r89888;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

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

Derivation

  1. Split input into 3 regimes
  2. if a < -1.3861963483449722e+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 add-sqr-sqrt45.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(b, \varepsilon, {b}^{2} \cdot \color{blue}{\left(\sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)}\right)}\]
    6. Applied add-sqr-sqrt45.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(b, \varepsilon, \color{blue}{\left(\sqrt{{b}^{2}} \cdot \sqrt{{b}^{2}}\right)} \cdot \left(\sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)\right)}\]
    7. Applied unswap-sqr45.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(b, \varepsilon, \color{blue}{\left(\sqrt{{b}^{2}} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right) \cdot \left(\sqrt{{b}^{2}} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)}\right)}\]
    8. Simplified45.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(b, \varepsilon, \color{blue}{\left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)} \cdot \left(\sqrt{{b}^{2}} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)\right)}\]
    9. Simplified44.2

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

    if -1.3861963483449722e+79 < a < 2.6102556639697233e+104

    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.6102556639697233e+104 < a

    1. Initial program 53.3

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

      \[\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 add-sqr-sqrt45.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}^{2} \cdot \color{blue}{\left(\sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)}\right)}\]
    6. Applied add-sqr-sqrt45.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}{\left(\sqrt{{b}^{2}} \cdot \sqrt{{b}^{2}}\right)} \cdot \left(\sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)\right)}\]
    7. Applied unswap-sqr45.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}{\left(\sqrt{{b}^{2}} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right) \cdot \left(\sqrt{{b}^{2}} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)}\right)}\]
    8. Simplified45.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}{\left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)} \cdot \left(\sqrt{{b}^{2}} \cdot \sqrt{\frac{1}{2} \cdot {\varepsilon}^{2} + \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b}\right)\right)}\]
    9. Simplified44.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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \color{blue}{\left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)}\right)}\]
    10. Using strategy rm
    11. Applied expm1-log1p-u44.1

      \[\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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification52.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -1.386196348344972242970976545867568916909 \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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right)\right)}\\ \mathbf{elif}\;a \le 2.610255663969723268136549668862625934183 \cdot 10^{104}:\\ \;\;\;\;\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, \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|b\right|\right) \cdot \left(\sqrt{\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \left(\frac{1}{6} \cdot {\varepsilon}^{3}\right) \cdot b\right)} \cdot \left|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))))