Average Error: 58.6 → 50.8
Time: 1.9m
Precision: 64
\[\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.4042236437500614 \cdot 10^{+35}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\ \mathbf{elif}\;a \le 2.601052546150997 \cdot 10^{+145}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) + \left(\left(\left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) \cdot \left(a \cdot \frac{1}{6}\right)\right) \cdot \varepsilon + \varepsilon \cdot a\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\ \end{array}\]
double f(double a, double b, double eps) {
        double r11159636 = eps;
        double r11159637 = a;
        double r11159638 = b;
        double r11159639 = r11159637 + r11159638;
        double r11159640 = r11159639 * r11159636;
        double r11159641 = exp(r11159640);
        double r11159642 = 1.0;
        double r11159643 = r11159641 - r11159642;
        double r11159644 = r11159636 * r11159643;
        double r11159645 = r11159637 * r11159636;
        double r11159646 = exp(r11159645);
        double r11159647 = r11159646 - r11159642;
        double r11159648 = r11159638 * r11159636;
        double r11159649 = exp(r11159648);
        double r11159650 = r11159649 - r11159642;
        double r11159651 = r11159647 * r11159650;
        double r11159652 = r11159644 / r11159651;
        return r11159652;
}

double f(double a, double b, double eps) {
        double r11159653 = a;
        double r11159654 = -2.4042236437500614e+35;
        bool r11159655 = r11159653 <= r11159654;
        double r11159656 = eps;
        double r11159657 = b;
        double r11159658 = r11159653 + r11159657;
        double r11159659 = r11159656 * r11159658;
        double r11159660 = exp(r11159659);
        double r11159661 = 1.0;
        double r11159662 = r11159660 - r11159661;
        double r11159663 = r11159656 * r11159662;
        double r11159664 = r11159656 * r11159657;
        double r11159665 = 0.5;
        double r11159666 = r11159664 * r11159664;
        double r11159667 = r11159665 * r11159666;
        double r11159668 = r11159666 * r11159657;
        double r11159669 = r11159656 * r11159668;
        double r11159670 = 0.16666666666666666;
        double r11159671 = r11159669 * r11159670;
        double r11159672 = r11159667 + r11159671;
        double r11159673 = r11159664 + r11159672;
        double r11159674 = r11159656 * r11159653;
        double r11159675 = exp(r11159674);
        double r11159676 = r11159675 - r11159661;
        double r11159677 = r11159673 * r11159676;
        double r11159678 = r11159663 / r11159677;
        double r11159679 = 2.601052546150997e+145;
        bool r11159680 = r11159653 <= r11159679;
        double r11159681 = exp(r11159664);
        double r11159682 = r11159681 - r11159661;
        double r11159683 = r11159674 * r11159674;
        double r11159684 = r11159665 * r11159683;
        double r11159685 = r11159653 * r11159670;
        double r11159686 = r11159683 * r11159685;
        double r11159687 = r11159686 * r11159656;
        double r11159688 = r11159687 + r11159674;
        double r11159689 = r11159684 + r11159688;
        double r11159690 = r11159682 * r11159689;
        double r11159691 = r11159663 / r11159690;
        double r11159692 = r11159680 ? r11159691 : r11159678;
        double r11159693 = r11159655 ? r11159678 : r11159692;
        return r11159693;
}

\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.4042236437500614 \cdot 10^{+35}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\

\mathbf{elif}\;a \le 2.601052546150997 \cdot 10^{+145}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) + \left(\left(\left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) \cdot \left(a \cdot \frac{1}{6}\right)\right) \cdot \varepsilon + \varepsilon \cdot a\right)\right)}\\

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

\end{array}

Error

Bits error versus a

Bits error versus b

Bits error versus eps

Target

Original58.6
Target14.1
Herbie50.8
\[\frac{a + b}{a \cdot b}\]

Derivation

  1. Split input into 2 regimes
  2. if a < -2.4042236437500614e+35 or 2.601052546150997e+145 < a

    1. Initial program 52.6

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

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

    if -2.4042236437500614e+35 < a < 2.601052546150997e+145

    1. Initial program 61.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 54.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -2.4042236437500614 \cdot 10^{+35}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\ \mathbf{elif}\;a \le 2.601052546150997 \cdot 10^{+145}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) + \left(\left(\left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right) \cdot \left(a \cdot \frac{1}{6}\right)\right) \cdot \varepsilon + \varepsilon \cdot a\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(a + b\right)} - 1\right)}{\left(\varepsilon \cdot b + \left(\frac{1}{2} \cdot \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) + \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) \cdot \frac{1}{6}\right)\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019102 
(FPCore (a b eps)
  :name "expq3 (problem 3.4.2)"
  :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))))