e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -8.5761719319625954 \cdot 10^{-23}:\\
\;\;\;\;\log \left(e^{e^{a \cdot x} - 1}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(x \cdot \left(\left(\frac{1}{6} \cdot {a}^{3}\right) \cdot x + \frac{1}{2} \cdot {a}^{2}\right)\right) + a \cdot x\\
\end{array}double f(double a, double x) {
double r109149 = a;
double r109150 = x;
double r109151 = r109149 * r109150;
double r109152 = exp(r109151);
double r109153 = 1.0;
double r109154 = r109152 - r109153;
return r109154;
}
double f(double a, double x) {
double r109155 = a;
double r109156 = x;
double r109157 = r109155 * r109156;
double r109158 = -8.576171931962595e-23;
bool r109159 = r109157 <= r109158;
double r109160 = exp(r109157);
double r109161 = 1.0;
double r109162 = r109160 - r109161;
double r109163 = exp(r109162);
double r109164 = log(r109163);
double r109165 = 0.16666666666666666;
double r109166 = 3.0;
double r109167 = pow(r109155, r109166);
double r109168 = r109165 * r109167;
double r109169 = r109168 * r109156;
double r109170 = 0.5;
double r109171 = 2.0;
double r109172 = pow(r109155, r109171);
double r109173 = r109170 * r109172;
double r109174 = r109169 + r109173;
double r109175 = r109156 * r109174;
double r109176 = r109156 * r109175;
double r109177 = r109176 + r109157;
double r109178 = r109159 ? r109164 : r109177;
return r109178;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.6 |
|---|---|
| Target | 0.2 |
| Herbie | 5.3 |
if (* a x) < -8.576171931962595e-23Initial program 2.2
rmApplied add-log-exp2.2
Applied add-log-exp2.2
Applied diff-log2.3
Simplified2.2
if -8.576171931962595e-23 < (* a x) Initial program 44.1
Taylor expanded around 0 13.5
Simplified10.4
rmApplied unpow210.4
Applied associate-*l*7.0
Final simplification5.3
herbie shell --seed 2019195
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1.0 (+ (/ (* a x) 2.0) (/ (pow (* a x) 2.0) 6.0)))) (- (exp (* a x)) 1.0))
(- (exp (* a x)) 1.0))