e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -8.829291748098453965699783086839461538272 \cdot 10^{-15}:\\
\;\;\;\;\frac{\frac{e^{\left(a \cdot x\right) \cdot 4} - {1}^{4}}{\mathsf{fma}\left(1, 1, e^{2 \cdot \left(a \cdot x\right)}\right)}}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{expm1}\left(x \cdot \left(a + \left(\left(a \cdot a\right) \cdot \left(\left(x \cdot \frac{1}{6}\right) \cdot a + \frac{1}{2}\right)\right) \cdot x\right)\right)\right)\\
\end{array}double f(double a, double x) {
double r85499 = a;
double r85500 = x;
double r85501 = r85499 * r85500;
double r85502 = exp(r85501);
double r85503 = 1.0;
double r85504 = r85502 - r85503;
return r85504;
}
double f(double a, double x) {
double r85505 = a;
double r85506 = x;
double r85507 = r85505 * r85506;
double r85508 = -8.829291748098454e-15;
bool r85509 = r85507 <= r85508;
double r85510 = 4.0;
double r85511 = r85507 * r85510;
double r85512 = exp(r85511);
double r85513 = 1.0;
double r85514 = pow(r85513, r85510);
double r85515 = r85512 - r85514;
double r85516 = 2.0;
double r85517 = r85516 * r85507;
double r85518 = exp(r85517);
double r85519 = fma(r85513, r85513, r85518);
double r85520 = r85515 / r85519;
double r85521 = exp(r85507);
double r85522 = r85521 + r85513;
double r85523 = r85520 / r85522;
double r85524 = r85505 * r85505;
double r85525 = 0.16666666666666666;
double r85526 = r85506 * r85525;
double r85527 = r85526 * r85505;
double r85528 = 0.5;
double r85529 = r85527 + r85528;
double r85530 = r85524 * r85529;
double r85531 = r85530 * r85506;
double r85532 = r85505 + r85531;
double r85533 = r85506 * r85532;
double r85534 = expm1(r85533);
double r85535 = log1p(r85534);
double r85536 = r85509 ? r85523 : r85535;
return r85536;
}




Bits error versus a




Bits error versus x
| Original | 29.8 |
|---|---|
| Target | 0.2 |
| Herbie | 3.1 |
if (* a x) < -8.829291748098454e-15Initial program 1.1
rmApplied flip--1.1
Simplified1.0
rmApplied flip--1.0
Simplified1.0
Simplified1.0
if -8.829291748098454e-15 < (* a x) Initial program 44.8
Taylor expanded around 0 14.1
Simplified10.7
rmApplied log1p-expm1-u10.7
Simplified4.2
Final simplification3.1
herbie shell --seed 2019235 +o rules:numerics
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.10000000000000001) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))