\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}\;b \le -3.2697307538617256 \cdot 10^{+104}:\\
\;\;\;\;\frac{\sqrt[3]{\left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right) \cdot \left(\left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right) \cdot \left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right)\right)} \cdot \varepsilon}{\left(\left(\varepsilon \cdot a + \varepsilon \cdot \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)\right)\right) + \frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)\right) \cdot \left(e^{\varepsilon \cdot b} - 1\right)}\\
\mathbf{elif}\;b \le 1.981037746615871 \cdot 10^{+71}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right)}{\left(\left(\frac{1}{6} \cdot \left(\varepsilon \cdot \left(\left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot b\right)\right) + \left(\left(\varepsilon \cdot b\right) \cdot \left(\varepsilon \cdot b\right)\right) \cdot \frac{1}{2}\right) + \varepsilon \cdot b\right) \cdot \left(e^{\varepsilon \cdot a} - 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\varepsilon \cdot \left(b + a\right)} - 1\right)}{\left(e^{\varepsilon \cdot b} - 1\right) \cdot \left(\sqrt[3]{\left(\varepsilon \cdot a + \varepsilon \cdot \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)\right)\right) + \frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)} \cdot \left(\sqrt[3]{\left(\varepsilon \cdot a + \varepsilon \cdot \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)\right)\right) + \frac{1}{2} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)} \cdot \left(\left(\sqrt[3]{\varepsilon \cdot a} + \frac{1}{6} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \sqrt[3]{\varepsilon \cdot a}\right)\right) + \frac{1}{36} \cdot \left(\sqrt[3]{\varepsilon \cdot a} \cdot \left(\left(\varepsilon \cdot a\right) \cdot \left(\varepsilon \cdot a\right)\right)\right)\right)\right)\right)}\\
\end{array}double f(double a, double b, double eps) {
double r22839563 = eps;
double r22839564 = a;
double r22839565 = b;
double r22839566 = r22839564 + r22839565;
double r22839567 = r22839566 * r22839563;
double r22839568 = exp(r22839567);
double r22839569 = 1.0;
double r22839570 = r22839568 - r22839569;
double r22839571 = r22839563 * r22839570;
double r22839572 = r22839564 * r22839563;
double r22839573 = exp(r22839572);
double r22839574 = r22839573 - r22839569;
double r22839575 = r22839565 * r22839563;
double r22839576 = exp(r22839575);
double r22839577 = r22839576 - r22839569;
double r22839578 = r22839574 * r22839577;
double r22839579 = r22839571 / r22839578;
return r22839579;
}
double f(double a, double b, double eps) {
double r22839580 = b;
double r22839581 = -3.2697307538617256e+104;
bool r22839582 = r22839580 <= r22839581;
double r22839583 = eps;
double r22839584 = a;
double r22839585 = r22839580 + r22839584;
double r22839586 = r22839583 * r22839585;
double r22839587 = exp(r22839586);
double r22839588 = 1.0;
double r22839589 = r22839587 - r22839588;
double r22839590 = r22839589 * r22839589;
double r22839591 = r22839589 * r22839590;
double r22839592 = cbrt(r22839591);
double r22839593 = r22839592 * r22839583;
double r22839594 = r22839583 * r22839584;
double r22839595 = 0.16666666666666666;
double r22839596 = r22839595 * r22839584;
double r22839597 = r22839594 * r22839594;
double r22839598 = r22839596 * r22839597;
double r22839599 = r22839583 * r22839598;
double r22839600 = r22839594 + r22839599;
double r22839601 = 0.5;
double r22839602 = r22839601 * r22839597;
double r22839603 = r22839600 + r22839602;
double r22839604 = r22839583 * r22839580;
double r22839605 = exp(r22839604);
double r22839606 = r22839605 - r22839588;
double r22839607 = r22839603 * r22839606;
double r22839608 = r22839593 / r22839607;
double r22839609 = 1.981037746615871e+71;
bool r22839610 = r22839580 <= r22839609;
double r22839611 = r22839583 * r22839589;
double r22839612 = r22839604 * r22839604;
double r22839613 = r22839612 * r22839580;
double r22839614 = r22839583 * r22839613;
double r22839615 = r22839595 * r22839614;
double r22839616 = r22839612 * r22839601;
double r22839617 = r22839615 + r22839616;
double r22839618 = r22839617 + r22839604;
double r22839619 = exp(r22839594);
double r22839620 = r22839619 - r22839588;
double r22839621 = r22839618 * r22839620;
double r22839622 = r22839611 / r22839621;
double r22839623 = cbrt(r22839603);
double r22839624 = cbrt(r22839594);
double r22839625 = r22839594 * r22839624;
double r22839626 = r22839595 * r22839625;
double r22839627 = r22839624 + r22839626;
double r22839628 = 0.027777777777777776;
double r22839629 = r22839624 * r22839597;
double r22839630 = r22839628 * r22839629;
double r22839631 = r22839627 + r22839630;
double r22839632 = r22839623 * r22839631;
double r22839633 = r22839623 * r22839632;
double r22839634 = r22839606 * r22839633;
double r22839635 = r22839611 / r22839634;
double r22839636 = r22839610 ? r22839622 : r22839635;
double r22839637 = r22839582 ? r22839608 : r22839636;
return r22839637;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 58.4 |
|---|---|
| Target | 14.2 |
| Herbie | 51.3 |
if b < -3.2697307538617256e+104Initial program 51.2
Taylor expanded around 0 46.0
Simplified42.1
rmApplied add-cbrt-cube42.1
if -3.2697307538617256e+104 < b < 1.981037746615871e+71Initial program 61.4
Taylor expanded around 0 55.0
Simplified55.0
if 1.981037746615871e+71 < b Initial program 52.1
Taylor expanded around 0 47.5
Simplified44.0
rmApplied add-cube-cbrt44.3
Taylor expanded around 0 61.6
Simplified44.1
Final simplification51.3
herbie shell --seed 2019128
(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))))