e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.00015296354407290798:\\
\;\;\;\;\frac{\log \left(e^{e^{a \cdot x} \cdot e^{a \cdot x} - 1}\right)}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right) \cdot \left(a \cdot x\right)\right) \cdot \frac{1}{6} + \left(a \cdot x + \left(a \cdot x\right) \cdot \left(\left(a \cdot x\right) \cdot \frac{1}{2}\right)\right)\\
\end{array}double f(double a, double x) {
double r4727501 = a;
double r4727502 = x;
double r4727503 = r4727501 * r4727502;
double r4727504 = exp(r4727503);
double r4727505 = 1.0;
double r4727506 = r4727504 - r4727505;
return r4727506;
}
double f(double a, double x) {
double r4727507 = a;
double r4727508 = x;
double r4727509 = r4727507 * r4727508;
double r4727510 = -0.00015296354407290798;
bool r4727511 = r4727509 <= r4727510;
double r4727512 = exp(r4727509);
double r4727513 = r4727512 * r4727512;
double r4727514 = 1.0;
double r4727515 = r4727513 - r4727514;
double r4727516 = exp(r4727515);
double r4727517 = log(r4727516);
double r4727518 = r4727512 + r4727514;
double r4727519 = r4727517 / r4727518;
double r4727520 = r4727509 * r4727509;
double r4727521 = r4727520 * r4727509;
double r4727522 = 0.16666666666666666;
double r4727523 = r4727521 * r4727522;
double r4727524 = 0.5;
double r4727525 = r4727509 * r4727524;
double r4727526 = r4727509 * r4727525;
double r4727527 = r4727509 + r4727526;
double r4727528 = r4727523 + r4727527;
double r4727529 = r4727511 ? r4727519 : r4727528;
return r4727529;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (* a x) < -0.00015296354407290798Initial program 0.1
rmApplied flip--0.1
Simplified0.1
rmApplied add-log-exp0.1
if -0.00015296354407290798 < (* a x) Initial program 44.7
Taylor expanded around 0 14.2
Simplified0.5
Final simplification0.3
herbie shell --seed 2019134
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-target
(if (< (fabs (* a x)) 1/10) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))