e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.883670130696454110254072018681462839622 \cdot 10^{-19}:\\
\;\;\;\;\frac{\left(\sqrt{{\left(e^{a \cdot x}\right)}^{3}} + \sqrt{{1}^{3}}\right) \cdot \left(\sqrt{{\left(e^{a \cdot x}\right)}^{3}} - \sqrt{{1}^{3}}\right)}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\mathbf{elif}\;a \cdot x \le 5.145272381710981521082629097103889956475 \cdot 10^{-33}:\\
\;\;\;\;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)\\
\mathbf{else}:\\
\;\;\;\;\frac{\left({\left(e^{a \cdot x}\right)}^{\frac{3}{2}} + {1}^{\frac{3}{2}}\right) \cdot e^{\log \left({\left(e^{a \cdot x}\right)}^{\frac{3}{2}} - {1}^{\frac{3}{2}}\right)}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\end{array}double f(double a, double x) {
double r123367 = a;
double r123368 = x;
double r123369 = r123367 * r123368;
double r123370 = exp(r123369);
double r123371 = 1.0;
double r123372 = r123370 - r123371;
return r123372;
}
double f(double a, double x) {
double r123373 = a;
double r123374 = x;
double r123375 = r123373 * r123374;
double r123376 = -6.883670130696454e-19;
bool r123377 = r123375 <= r123376;
double r123378 = exp(r123375);
double r123379 = 3.0;
double r123380 = pow(r123378, r123379);
double r123381 = sqrt(r123380);
double r123382 = 1.0;
double r123383 = pow(r123382, r123379);
double r123384 = sqrt(r123383);
double r123385 = r123381 + r123384;
double r123386 = r123381 - r123384;
double r123387 = r123385 * r123386;
double r123388 = r123378 + r123382;
double r123389 = r123378 * r123388;
double r123390 = r123382 * r123382;
double r123391 = r123389 + r123390;
double r123392 = r123387 / r123391;
double r123393 = 5.1452723817109815e-33;
bool r123394 = r123375 <= r123393;
double r123395 = 0.5;
double r123396 = 2.0;
double r123397 = pow(r123373, r123396);
double r123398 = r123395 * r123397;
double r123399 = r123398 * r123374;
double r123400 = r123373 + r123399;
double r123401 = r123374 * r123400;
double r123402 = 0.16666666666666666;
double r123403 = pow(r123373, r123379);
double r123404 = pow(r123374, r123379);
double r123405 = r123403 * r123404;
double r123406 = r123402 * r123405;
double r123407 = r123401 + r123406;
double r123408 = 1.5;
double r123409 = pow(r123378, r123408);
double r123410 = pow(r123382, r123408);
double r123411 = r123409 + r123410;
double r123412 = r123409 - r123410;
double r123413 = log(r123412);
double r123414 = exp(r123413);
double r123415 = r123411 * r123414;
double r123416 = r123415 / r123391;
double r123417 = r123394 ? r123407 : r123416;
double r123418 = r123377 ? r123392 : r123417;
return r123418;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 9.8 |
if (* a x) < -6.883670130696454e-19Initial program 1.4
rmApplied flip3--1.4
Simplified1.4
rmApplied add-sqr-sqrt1.4
Applied add-sqr-sqrt1.5
Applied difference-of-squares1.4
if -6.883670130696454e-19 < (* a x) < 5.1452723817109815e-33Initial program 45.3
Taylor expanded around 0 12.6
Simplified12.6
if 5.1452723817109815e-33 < (* a x) Initial program 38.5
rmApplied flip3--39.2
Simplified39.2
rmApplied sqr-pow39.2
Applied sqr-pow39.2
Applied difference-of-squares39.3
Simplified39.3
Simplified39.3
rmApplied add-exp-log39.3
Final simplification9.8
herbie shell --seed 2019353
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))