e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \leq -0.00031988822706872905:\\
\;\;\;\;\frac{{\left({\left(e^{a \cdot x}\right)}^{2}\right)}^{3} + -1}{\left(e^{a \cdot x} + 1\right) \cdot \left({\left(e^{a \cdot x}\right)}^{4} + \left({\left(e^{a \cdot x}\right)}^{2} + 1\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x + 1\right)\right)}{1 + \left(a \cdot x + 1\right)}\\
\end{array}(FPCore (a x) :precision binary64 (- (exp (* a x)) 1.0))
(FPCore (a x)
:precision binary64
(if (<= (* a x) -0.00031988822706872905)
(/
(+ (pow (pow (exp (* a x)) 2.0) 3.0) -1.0)
(*
(+ (exp (* a x)) 1.0)
(+ (pow (exp (* a x)) 4.0) (+ (pow (exp (* a x)) 2.0) 1.0))))
(/ (* 2.0 (* (* a x) (+ (* a x) 1.0))) (+ 1.0 (+ (* a x) 1.0)))))double code(double a, double x) {
return exp(a * x) - 1.0;
}
double code(double a, double x) {
double tmp;
if ((a * x) <= -0.00031988822706872905) {
tmp = (pow(pow(exp(a * x), 2.0), 3.0) + -1.0) / ((exp(a * x) + 1.0) * (pow(exp(a * x), 4.0) + (pow(exp(a * x), 2.0) + 1.0)));
} else {
tmp = (2.0 * ((a * x) * ((a * x) + 1.0))) / (1.0 + ((a * x) + 1.0));
}
return tmp;
}














Bits error versus a














Bits error versus x
Results
| Original | 28.8 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
| Alternative 1 | |
|---|---|
| Error | 0.4 |
| Cost | 20545 |
| Alternative 2 | |
|---|---|
| Error | 0.4 |
| Cost | 20417 |
| Alternative 3 | |
|---|---|
| Error | 0.4 |
| Cost | 7169 |
| Alternative 4 | |
|---|---|
| Error | 0.6 |
| Cost | 1665 |
| Alternative 5 | |
|---|---|
| Error | 0.6 |
| Cost | 1537 |
| Alternative 6 | |
|---|---|
| Error | 1.1 |
| Cost | 1281 |
| Alternative 7 | |
|---|---|
| Error | 1.1 |
| Cost | 641 |
| Alternative 8 | |
|---|---|
| Error | 34.1 |
| Cost | 706 |
| Alternative 9 | |
|---|---|
| Error | 51.4 |
| Cost | 64 |
| Alternative 10 | |
|---|---|
| Error | 62.1 |
| Cost | 64 |

if (*.f64 a x) < -3.19888227068729051e-4Initial program 0.0
rmApplied flip--_binary64_20990.0
Simplified0.0
rmApplied flip3-+_binary64_21270.0
Applied associate-/l/_binary64_20710.0
Simplified0.0
Simplified0.0
if -3.19888227068729051e-4 < (*.f64 a x) Initial program 43.9
rmApplied flip--_binary64_209943.9
Simplified43.9
Taylor expanded around 0 7.5
Simplified0.6
Taylor expanded around 0 0.6
Simplified0.6
Final simplification0.4
herbie shell --seed 2021044
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1.0 (+ (/ (* a x) 2.0) (/ (pow (* a x) 2.0) 6.0)))) (- (exp (* a x)) 1.0))
(- (exp (* a x)) 1.0))