\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.132327481851413 \cdot 10^{26} \lor \neg \left(a \le 6.3645685997601476 \cdot 10^{46}\right):\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(e^{a \cdot \varepsilon} - 1\right) \cdot \left(\varepsilon \cdot b + 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)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\varepsilon \cdot \left(e^{\left(a + b\right) \cdot \varepsilon} - 1\right)}{\left(\varepsilon \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot \varepsilon\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {\varepsilon}^{3}\right)\right) \cdot \left(e^{b \cdot \varepsilon} - 1\right)}\\
\end{array}double f(double a, double b, double eps) {
double r95100 = eps;
double r95101 = a;
double r95102 = b;
double r95103 = r95101 + r95102;
double r95104 = r95103 * r95100;
double r95105 = exp(r95104);
double r95106 = 1.0;
double r95107 = r95105 - r95106;
double r95108 = r95100 * r95107;
double r95109 = r95101 * r95100;
double r95110 = exp(r95109);
double r95111 = r95110 - r95106;
double r95112 = r95102 * r95100;
double r95113 = exp(r95112);
double r95114 = r95113 - r95106;
double r95115 = r95111 * r95114;
double r95116 = r95108 / r95115;
return r95116;
}
double f(double a, double b, double eps) {
double r95117 = a;
double r95118 = -2.132327481851413e+26;
bool r95119 = r95117 <= r95118;
double r95120 = 6.364568599760148e+46;
bool r95121 = r95117 <= r95120;
double r95122 = !r95121;
bool r95123 = r95119 || r95122;
double r95124 = eps;
double r95125 = b;
double r95126 = r95117 + r95125;
double r95127 = r95126 * r95124;
double r95128 = exp(r95127);
double r95129 = 1.0;
double r95130 = r95128 - r95129;
double r95131 = r95124 * r95130;
double r95132 = r95117 * r95124;
double r95133 = exp(r95132);
double r95134 = r95133 - r95129;
double r95135 = r95124 * r95125;
double r95136 = 0.5;
double r95137 = 2.0;
double r95138 = pow(r95124, r95137);
double r95139 = r95136 * r95138;
double r95140 = 0.16666666666666666;
double r95141 = 3.0;
double r95142 = pow(r95124, r95141);
double r95143 = r95140 * r95142;
double r95144 = r95143 * r95125;
double r95145 = r95139 + r95144;
double r95146 = r95125 * r95145;
double r95147 = r95125 * r95146;
double r95148 = r95135 + r95147;
double r95149 = r95134 * r95148;
double r95150 = r95131 / r95149;
double r95151 = pow(r95117, r95137);
double r95152 = r95136 * r95151;
double r95153 = r95152 * r95124;
double r95154 = r95117 + r95153;
double r95155 = r95124 * r95154;
double r95156 = pow(r95117, r95141);
double r95157 = r95156 * r95142;
double r95158 = r95140 * r95157;
double r95159 = r95155 + r95158;
double r95160 = r95125 * r95124;
double r95161 = exp(r95160);
double r95162 = r95161 - r95129;
double r95163 = r95159 * r95162;
double r95164 = r95131 / r95163;
double r95165 = r95123 ? r95150 : r95164;
return r95165;
}




Bits error versus a




Bits error versus b




Bits error versus eps
Results
| Original | 60.4 |
|---|---|
| Target | 15.1 |
| Herbie | 52.4 |
if a < -2.132327481851413e+26 or 6.364568599760148e+46 < a Initial program 54.7
Taylor expanded around 0 49.1
Simplified46.4
rmApplied unpow246.4
Applied associate-*l*45.5
if -2.132327481851413e+26 < a < 6.364568599760148e+46Initial program 63.8
Taylor expanded around 0 56.5
Simplified56.5
Final simplification52.4
herbie shell --seed 2020047
(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))))