e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -6.883670130696454110254072018681462839622 \cdot 10^{-19}:\\
\;\;\;\;\sqrt[3]{{\left(\mathsf{fma}\left(\sqrt{e^{a \cdot x}}, \sqrt{\left(\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}\right) \cdot \sqrt[3]{e^{a \cdot x}}}, -1\right)\right)}^{3}}\\
\mathbf{elif}\;a \cdot x \le 5.145272381710981521082629097103889956475 \cdot 10^{-33}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{2}, {a}^{2} \cdot {x}^{2}, \mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, a \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\mathsf{fma}\left(\sqrt{e^{a \cdot x}}, \sqrt{e^{a \cdot x}}, -1\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\sqrt{e^{a \cdot x}}, \sqrt{e^{a \cdot x}}, -1\right)}\right) \cdot \left(\sqrt[3]{1} \cdot {\left(e^{a \cdot x} - 1\right)}^{\frac{1}{3}}\right)\\
\end{array}double f(double a, double x) {
double r128388 = a;
double r128389 = x;
double r128390 = r128388 * r128389;
double r128391 = exp(r128390);
double r128392 = 1.0;
double r128393 = r128391 - r128392;
return r128393;
}
double f(double a, double x) {
double r128394 = a;
double r128395 = x;
double r128396 = r128394 * r128395;
double r128397 = -6.883670130696454e-19;
bool r128398 = r128396 <= r128397;
double r128399 = exp(r128396);
double r128400 = sqrt(r128399);
double r128401 = cbrt(r128399);
double r128402 = r128401 * r128401;
double r128403 = r128402 * r128401;
double r128404 = sqrt(r128403);
double r128405 = 1.0;
double r128406 = -r128405;
double r128407 = fma(r128400, r128404, r128406);
double r128408 = 3.0;
double r128409 = pow(r128407, r128408);
double r128410 = cbrt(r128409);
double r128411 = 5.1452723817109815e-33;
bool r128412 = r128396 <= r128411;
double r128413 = 0.5;
double r128414 = 2.0;
double r128415 = pow(r128394, r128414);
double r128416 = pow(r128395, r128414);
double r128417 = r128415 * r128416;
double r128418 = 0.16666666666666666;
double r128419 = pow(r128394, r128408);
double r128420 = pow(r128395, r128408);
double r128421 = r128419 * r128420;
double r128422 = fma(r128418, r128421, r128396);
double r128423 = fma(r128413, r128417, r128422);
double r128424 = fma(r128400, r128400, r128406);
double r128425 = cbrt(r128424);
double r128426 = r128425 * r128425;
double r128427 = 1.0;
double r128428 = cbrt(r128427);
double r128429 = r128399 - r128405;
double r128430 = 0.3333333333333333;
double r128431 = pow(r128429, r128430);
double r128432 = r128428 * r128431;
double r128433 = r128426 * r128432;
double r128434 = r128412 ? r128423 : r128433;
double r128435 = r128398 ? r128410 : r128434;
return r128435;
}




Bits error versus a




Bits error versus x
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 9.8 |
if (* a x) < -6.883670130696454e-19Initial program 1.4
rmApplied add-sqr-sqrt1.5
Applied fma-neg1.5
rmApplied add-cube-cbrt1.5
rmApplied add-cbrt-cube1.5
Simplified1.5
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 add-sqr-sqrt39.1
Applied fma-neg39.1
rmApplied add-cube-cbrt39.1
rmApplied *-un-lft-identity39.1
Applied cbrt-prod39.1
Simplified38.8
Final simplification9.8
herbie shell --seed 2019353 +o rules:numerics
(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))