e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.01718427484698143575814199834894679952413:\\
\;\;\;\;\frac{e^{2 \cdot \left(a \cdot x\right)} - 1 \cdot 1}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + x \cdot \left(\left(\left(a \cdot x\right) \cdot a\right) \cdot \left(\left(a \cdot x\right) \cdot \frac{1}{6} + \frac{1}{2}\right)\right)\\
\end{array}double f(double a, double x) {
double r89285 = a;
double r89286 = x;
double r89287 = r89285 * r89286;
double r89288 = exp(r89287);
double r89289 = 1.0;
double r89290 = r89288 - r89289;
return r89290;
}
double f(double a, double x) {
double r89291 = a;
double r89292 = x;
double r89293 = r89291 * r89292;
double r89294 = -0.017184274846981436;
bool r89295 = r89293 <= r89294;
double r89296 = 2.0;
double r89297 = r89296 * r89293;
double r89298 = exp(r89297);
double r89299 = 1.0;
double r89300 = r89299 * r89299;
double r89301 = r89298 - r89300;
double r89302 = exp(r89293);
double r89303 = r89302 + r89299;
double r89304 = r89301 / r89303;
double r89305 = r89293 * r89291;
double r89306 = 0.16666666666666666;
double r89307 = r89293 * r89306;
double r89308 = 0.5;
double r89309 = r89307 + r89308;
double r89310 = r89305 * r89309;
double r89311 = r89292 * r89310;
double r89312 = r89293 + r89311;
double r89313 = r89295 ? r89304 : r89312;
return r89313;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
if (* a x) < -0.017184274846981436Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if -0.017184274846981436 < (* a x) Initial program 44.7
Taylor expanded around 0 15.0
Simplified4.8
rmApplied associate-*r*4.8
Simplified0.7
rmApplied distribute-lft-in0.7
Simplified0.7
Final simplification0.4
herbie shell --seed 2019322
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))