e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -7.166980254436657516383787675125359952696 \cdot 10^{-23}:\\
\;\;\;\;e^{a \cdot x} - 1\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right)\\
\end{array}double f(double a, double x) {
double r89324 = a;
double r89325 = x;
double r89326 = r89324 * r89325;
double r89327 = exp(r89326);
double r89328 = 1.0;
double r89329 = r89327 - r89328;
return r89329;
}
double f(double a, double x) {
double r89330 = a;
double r89331 = x;
double r89332 = r89330 * r89331;
double r89333 = -7.166980254436658e-23;
bool r89334 = r89332 <= r89333;
double r89335 = exp(r89332);
double r89336 = 1.0;
double r89337 = r89335 - r89336;
double r89338 = 0.5;
double r89339 = 2.0;
double r89340 = pow(r89330, r89339);
double r89341 = r89338 * r89340;
double r89342 = r89341 * r89331;
double r89343 = r89330 + r89342;
double r89344 = r89331 * r89343;
double r89345 = 0.16666666666666666;
double r89346 = 3.0;
double r89347 = pow(r89330, r89346);
double r89348 = pow(r89331, r89346);
double r89349 = r89347 * r89348;
double r89350 = r89345 * r89349;
double r89351 = r89344 + r89350;
double r89352 = r89334 ? r89337 : r89351;
return r89352;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.1 |
|---|---|
| Target | 0.1 |
| Herbie | 9.6 |
if (* a x) < -7.166980254436658e-23Initial program 2.1
if -7.166980254436658e-23 < (* a x) Initial program 44.4
Taylor expanded around 0 13.8
Simplified13.8
Final simplification9.6
herbie shell --seed 2019297
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.10000000000000001) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))