e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -3.56979547989466417 \cdot 10^{-7}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{{\left(e^{\left(a \cdot x\right) \cdot 3 + \left(a \cdot x\right) \cdot 3} + \left(-{1}^{6}\right)\right)}^{3}}{{\left(e^{\left(a \cdot x\right) \cdot 3} + {1}^{3}\right)}^{3}}}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\mathbf{elif}\;a \cdot x \le 2.97473326445349939 \cdot 10^{-19}:\\
\;\;\;\;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{\sqrt[3]{{\left(e^{\left(a \cdot x\right) \cdot 3} - {1}^{3}\right)}^{3}}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\end{array}double f(double a, double x) {
double r76371 = a;
double r76372 = x;
double r76373 = r76371 * r76372;
double r76374 = exp(r76373);
double r76375 = 1.0;
double r76376 = r76374 - r76375;
return r76376;
}
double f(double a, double x) {
double r76377 = a;
double r76378 = x;
double r76379 = r76377 * r76378;
double r76380 = -3.569795479894664e-07;
bool r76381 = r76379 <= r76380;
double r76382 = 3.0;
double r76383 = r76379 * r76382;
double r76384 = r76383 + r76383;
double r76385 = exp(r76384);
double r76386 = 1.0;
double r76387 = 6.0;
double r76388 = pow(r76386, r76387);
double r76389 = -r76388;
double r76390 = r76385 + r76389;
double r76391 = pow(r76390, r76382);
double r76392 = exp(r76383);
double r76393 = pow(r76386, r76382);
double r76394 = r76392 + r76393;
double r76395 = pow(r76394, r76382);
double r76396 = r76391 / r76395;
double r76397 = cbrt(r76396);
double r76398 = exp(r76379);
double r76399 = r76398 + r76386;
double r76400 = r76398 * r76399;
double r76401 = r76386 * r76386;
double r76402 = r76400 + r76401;
double r76403 = r76397 / r76402;
double r76404 = 2.9747332644534994e-19;
bool r76405 = r76379 <= r76404;
double r76406 = 0.5;
double r76407 = 2.0;
double r76408 = pow(r76377, r76407);
double r76409 = r76406 * r76408;
double r76410 = r76409 * r76378;
double r76411 = r76377 + r76410;
double r76412 = r76378 * r76411;
double r76413 = 0.16666666666666666;
double r76414 = pow(r76377, r76382);
double r76415 = pow(r76378, r76382);
double r76416 = r76414 * r76415;
double r76417 = r76413 * r76416;
double r76418 = r76412 + r76417;
double r76419 = r76392 - r76393;
double r76420 = pow(r76419, r76382);
double r76421 = cbrt(r76420);
double r76422 = r76421 / r76402;
double r76423 = r76405 ? r76418 : r76422;
double r76424 = r76381 ? r76403 : r76423;
return r76424;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.2 |
|---|---|
| Target | 0.2 |
| Herbie | 9.2 |
if (* a x) < -3.569795479894664e-07Initial program 0.2
rmApplied flip3--0.2
Simplified0.2
rmApplied pow-exp0.2
rmApplied add-cbrt-cube0.2
Simplified0.2
rmApplied flip--0.2
Applied cube-div0.2
Simplified0.2
if -3.569795479894664e-07 < (* a x) < 2.9747332644534994e-19Initial program 45.1
Taylor expanded around 0 13.5
Simplified13.5
if 2.9747332644534994e-19 < (* a x) Initial program 25.4
rmApplied flip3--26.4
Simplified26.4
rmApplied pow-exp25.0
rmApplied add-cbrt-cube26.9
Simplified26.9
Final simplification9.2
herbie shell --seed 2020060
(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))