e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.001826657808704238751540405161222224705853:\\
\;\;\;\;\frac{e^{2 \cdot \left(a \cdot x\right)} - 1 \cdot 1}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;a \cdot x\\
\end{array}double f(double a, double x) {
double r104645 = a;
double r104646 = x;
double r104647 = r104645 * r104646;
double r104648 = exp(r104647);
double r104649 = 1.0;
double r104650 = r104648 - r104649;
return r104650;
}
double f(double a, double x) {
double r104651 = a;
double r104652 = x;
double r104653 = r104651 * r104652;
double r104654 = -0.0018266578087042388;
bool r104655 = r104653 <= r104654;
double r104656 = 2.0;
double r104657 = r104656 * r104653;
double r104658 = exp(r104657);
double r104659 = 1.0;
double r104660 = r104659 * r104659;
double r104661 = r104658 - r104660;
double r104662 = exp(r104653);
double r104663 = r104662 + r104659;
double r104664 = r104661 / r104663;
double r104665 = r104655 ? r104664 : r104653;
return r104665;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.9 |
if (* a x) < -0.0018266578087042388Initial program 0.0
rmApplied flip--0.0
Simplified0.0
if -0.0018266578087042388 < (* a x) Initial program 44.8
Taylor expanded around 0 14.4
Simplified11.4
Taylor expanded around 0 8.4
Simplified4.7
Taylor expanded around 0 1.3
Final simplification0.9
herbie shell --seed 2019209 +o rules:numerics
(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))