Average Error: 60.5 → 55.2
Time: 13.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}\;a \le -7.5412878197323673 \cdot 10^{174}:\\ \;\;\;\;\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 {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\ \mathbf{elif}\;a \le 2.34108127479914129 \cdot 10^{62}:\\ \;\;\;\;\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 \mathsf{expm1}\left(\mathsf{log1p}\left(e^{b \cdot \varepsilon} - 1\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\mathsf{fma}\left(-1, 1, {\left(e^{a}\right)}^{\left(2 \cdot \varepsilon\right)}\right)}{e^{a \cdot \varepsilon} + 1} \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 -7.5412878197323673 \cdot 10^{174}:\\
\;\;\;\;\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 {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\

\mathbf{elif}\;a \le 2.34108127479914129 \cdot 10^{62}:\\
\;\;\;\;\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 \mathsf{expm1}\left(\mathsf{log1p}\left(e^{b \cdot \varepsilon} - 1\right)\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\mathsf{fma}\left(-1, 1, {\left(e^{a}\right)}^{\left(2 \cdot \varepsilon\right)}\right)}{e^{a \cdot \varepsilon} + 1} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\

\end{array}
double f(double a, double b, double eps) {
        double r83870 = eps;
        double r83871 = a;
        double r83872 = b;
        double r83873 = r83871 + r83872;
        double r83874 = r83873 * r83870;
        double r83875 = exp(r83874);
        double r83876 = 1.0;
        double r83877 = r83875 - r83876;
        double r83878 = r83870 * r83877;
        double r83879 = r83871 * r83870;
        double r83880 = exp(r83879);
        double r83881 = r83880 - r83876;
        double r83882 = r83872 * r83870;
        double r83883 = exp(r83882);
        double r83884 = r83883 - r83876;
        double r83885 = r83881 * r83884;
        double r83886 = r83878 / r83885;
        return r83886;
}

double f(double a, double b, double eps) {
        double r83887 = a;
        double r83888 = -7.541287819732367e+174;
        bool r83889 = r83887 <= r83888;
        double r83890 = eps;
        double r83891 = b;
        double r83892 = r83887 + r83891;
        double r83893 = r83892 * r83890;
        double r83894 = exp(r83893);
        double r83895 = 1.0;
        double r83896 = r83894 - r83895;
        double r83897 = r83890 * r83896;
        double r83898 = r83887 * r83890;
        double r83899 = exp(r83898);
        double r83900 = r83899 - r83895;
        double r83901 = 0.16666666666666666;
        double r83902 = 3.0;
        double r83903 = pow(r83890, r83902);
        double r83904 = pow(r83891, r83902);
        double r83905 = r83903 * r83904;
        double r83906 = 0.5;
        double r83907 = 2.0;
        double r83908 = pow(r83890, r83907);
        double r83909 = pow(r83891, r83907);
        double r83910 = r83908 * r83909;
        double r83911 = r83890 * r83891;
        double r83912 = fma(r83906, r83910, r83911);
        double r83913 = fma(r83901, r83905, r83912);
        double r83914 = r83900 * r83913;
        double r83915 = r83897 / r83914;
        double r83916 = 2.3410812747991413e+62;
        bool r83917 = r83887 <= r83916;
        double r83918 = pow(r83887, r83902);
        double r83919 = r83918 * r83903;
        double r83920 = pow(r83887, r83907);
        double r83921 = r83920 * r83908;
        double r83922 = fma(r83906, r83921, r83898);
        double r83923 = fma(r83901, r83919, r83922);
        double r83924 = r83891 * r83890;
        double r83925 = exp(r83924);
        double r83926 = r83925 - r83895;
        double r83927 = log1p(r83926);
        double r83928 = expm1(r83927);
        double r83929 = r83923 * r83928;
        double r83930 = r83897 / r83929;
        double r83931 = -r83895;
        double r83932 = exp(r83887);
        double r83933 = r83907 * r83890;
        double r83934 = pow(r83932, r83933);
        double r83935 = fma(r83931, r83895, r83934);
        double r83936 = r83899 + r83895;
        double r83937 = r83935 / r83936;
        double r83938 = r83937 * r83926;
        double r83939 = r83897 / r83938;
        double r83940 = r83917 ? r83930 : r83939;
        double r83941 = r83889 ? r83915 : r83940;
        return r83941;
}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

Original60.5
Target14.9
Herbie55.2
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 3 regimes
  2. if a < -7.541287819732367e+174

    1. Initial program 50.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 40.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. Simplified40.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}, \varepsilon \cdot b\right)\right)}}\]

    if -7.541287819732367e+174 < a < 2.3410812747991413e+62

    1. Initial program 62.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 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)}\]
    4. Using strategy rm
    5. Applied expm1-log1p-u56.5

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

    if 2.3410812747991413e+62 < a

    1. Initial program 54.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. Using strategy rm
    3. Applied flip--56.6

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\color{blue}{\frac{e^{a \cdot \varepsilon} \cdot e^{a \cdot \varepsilon} - 1 \cdot 1}{e^{a \cdot \varepsilon} + 1}} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
    4. Simplified56.6

      \[\leadsto \frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\color{blue}{\mathsf{fma}\left(-1, 1, {\left(e^{a}\right)}^{\left(2 \cdot \varepsilon\right)}\right)}}{e^{a \cdot \varepsilon} + 1} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification55.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -7.5412878197323673 \cdot 10^{174}:\\ \;\;\;\;\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 {b}^{3}, \mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2} \cdot {b}^{2}, \varepsilon \cdot b\right)\right)}\\ \mathbf{elif}\;a \le 2.34108127479914129 \cdot 10^{62}:\\ \;\;\;\;\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 \mathsf{expm1}\left(\mathsf{log1p}\left(e^{b \cdot \varepsilon} - 1\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\frac{\mathsf{fma}\left(-1, 1, {\left(e^{a}\right)}^{\left(2 \cdot \varepsilon\right)}\right)}{e^{a \cdot \varepsilon} + 1} \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\ \end{array}\]

Reproduce

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