e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.007584270336138642688850186601712266565301:\\
\;\;\;\;\left(\sqrt{e^{a \cdot x}} + \sqrt{1}\right) \cdot \left(\sqrt{e^{a \cdot x}} - \sqrt{1}\right)\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + x \cdot \left(\left(\left(a \cdot x\right) \cdot a\right) \cdot \left(\left(a \cdot x\right) \cdot \frac{1}{6} + \frac{1}{2}\right)\right)\\
\end{array}double f(double a, double x) {
double r48062 = a;
double r48063 = x;
double r48064 = r48062 * r48063;
double r48065 = exp(r48064);
double r48066 = 1.0;
double r48067 = r48065 - r48066;
return r48067;
}
double f(double a, double x) {
double r48068 = a;
double r48069 = x;
double r48070 = r48068 * r48069;
double r48071 = -0.007584270336138643;
bool r48072 = r48070 <= r48071;
double r48073 = exp(r48070);
double r48074 = sqrt(r48073);
double r48075 = 1.0;
double r48076 = sqrt(r48075);
double r48077 = r48074 + r48076;
double r48078 = r48074 - r48076;
double r48079 = r48077 * r48078;
double r48080 = r48070 * r48068;
double r48081 = 0.16666666666666666;
double r48082 = r48070 * r48081;
double r48083 = 0.5;
double r48084 = r48082 + r48083;
double r48085 = r48080 * r48084;
double r48086 = r48069 * r48085;
double r48087 = r48070 + r48086;
double r48088 = r48072 ? r48079 : r48087;
return r48088;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (* a x) < -0.007584270336138643Initial program 0.0
rmApplied add-sqr-sqrt0.0
Applied add-sqr-sqrt0.0
Applied difference-of-squares0.0
if -0.007584270336138643 < (* a x) Initial program 44.2
Taylor expanded around 0 13.7
Simplified4.4
rmApplied associate-*r*4.4
Simplified0.5
rmApplied distribute-lft-in0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2019306
(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))