e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.9732286240242323 \cdot 10^{-4}:\\
\;\;\;\;\log \left(e^{e^{a \cdot x} - 1}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(a \cdot x + \frac{1}{2} \cdot {\left(a \cdot x\right)}^{2}\right) + \frac{1}{6} \cdot {\left(a \cdot x\right)}^{3}\\
\end{array}double f(double a, double x) {
double r69014 = a;
double r69015 = x;
double r69016 = r69014 * r69015;
double r69017 = exp(r69016);
double r69018 = 1.0;
double r69019 = r69017 - r69018;
return r69019;
}
double f(double a, double x) {
double r69020 = a;
double r69021 = x;
double r69022 = r69020 * r69021;
double r69023 = -0.00019732286240242323;
bool r69024 = r69022 <= r69023;
double r69025 = exp(r69022);
double r69026 = 1.0;
double r69027 = r69025 - r69026;
double r69028 = exp(r69027);
double r69029 = log(r69028);
double r69030 = 0.5;
double r69031 = 2.0;
double r69032 = pow(r69022, r69031);
double r69033 = r69030 * r69032;
double r69034 = r69022 + r69033;
double r69035 = 0.16666666666666666;
double r69036 = 3.0;
double r69037 = pow(r69022, r69036);
double r69038 = r69035 * r69037;
double r69039 = r69034 + r69038;
double r69040 = r69024 ? r69029 : r69039;
return r69040;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
if (* a x) < -0.00019732286240242323Initial program 0.1
rmApplied add-log-exp0.1
Applied add-log-exp0.1
Applied diff-log0.1
Simplified0.1
if -0.00019732286240242323 < (* a x) Initial program 44.0
Taylor expanded around 0 14.6
Simplified14.6
rmApplied pow-prod-down4.7
rmApplied distribute-lft-in4.7
Simplified4.7
Simplified0.5
Final simplification0.4
herbie shell --seed 2020083
(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))