e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.22178024346472369 \cdot 10^{-16}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}, \frac{e^{\left(a \cdot x\right) \cdot 4}}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}, \frac{-\frac{{1}^{4}}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}\right) + \frac{1}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}} \cdot \left(\left(-\frac{{1}^{4}}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}\right) + \frac{{1}^{4}}{\sqrt{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}\right)}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left({x}^{2}, \mathsf{fma}\left(x, \frac{1}{6} \cdot {a}^{3}, \frac{1}{2} \cdot {a}^{2}\right), a \cdot x\right)\\
\end{array}double f(double a, double x) {
double r72196 = a;
double r72197 = x;
double r72198 = r72196 * r72197;
double r72199 = exp(r72198);
double r72200 = 1.0;
double r72201 = r72199 - r72200;
return r72201;
}
double f(double a, double x) {
double r72202 = a;
double r72203 = x;
double r72204 = r72202 * r72203;
double r72205 = -6.221780243464724e-16;
bool r72206 = r72204 <= r72205;
double r72207 = 1.0;
double r72208 = 1.0;
double r72209 = 2.0;
double r72210 = r72209 * r72204;
double r72211 = exp(r72210);
double r72212 = fma(r72208, r72208, r72211);
double r72213 = sqrt(r72212);
double r72214 = r72207 / r72213;
double r72215 = 4.0;
double r72216 = r72204 * r72215;
double r72217 = exp(r72216);
double r72218 = r72217 / r72213;
double r72219 = pow(r72208, r72215);
double r72220 = r72219 / r72213;
double r72221 = -r72220;
double r72222 = r72221 / r72213;
double r72223 = fma(r72214, r72218, r72222);
double r72224 = r72221 + r72220;
double r72225 = r72214 * r72224;
double r72226 = r72223 + r72225;
double r72227 = exp(r72204);
double r72228 = r72227 + r72208;
double r72229 = r72226 / r72228;
double r72230 = pow(r72203, r72209);
double r72231 = 0.16666666666666666;
double r72232 = 3.0;
double r72233 = pow(r72202, r72232);
double r72234 = r72231 * r72233;
double r72235 = 0.5;
double r72236 = pow(r72202, r72209);
double r72237 = r72235 * r72236;
double r72238 = fma(r72203, r72234, r72237);
double r72239 = fma(r72230, r72238, r72204);
double r72240 = r72206 ? r72229 : r72239;
return r72240;
}




Bits error versus a




Bits error versus x
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 7.2 |
if (* a x) < -6.221780243464724e-16Initial program 1.0
rmApplied flip--1.0
Simplified1.0
rmApplied flip--1.0
Simplified0.9
Simplified0.9
rmApplied div-sub1.0
rmApplied add-sqr-sqrt1.0
Applied *-un-lft-identity1.0
Applied unpow-prod-down1.0
Applied times-frac1.0
Applied add-sqr-sqrt1.0
Applied *-un-lft-identity1.0
Applied times-frac1.0
Applied prod-diff1.0
Simplified1.0
Simplified1.0
if -6.221780243464724e-16 < (* a x) Initial program 44.6
Taylor expanded around 0 13.3
Simplified10.4
Final simplification7.2
herbie shell --seed 2019198 +o rules:numerics
(FPCore (a x)
:name "expax (section 3.5)"
: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))