e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.00015435000108057162:\\
\;\;\;\;\frac{\log \left(e^{e^{a \cdot x} \cdot e^{a \cdot x} - 1}\right)}{e^{a \cdot x} + 1}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{1}{6} \cdot \left(\left(a \cdot x\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right)\right) + \left(a \cdot x\right) \cdot \left(\frac{1}{2} \cdot \left(a \cdot x\right)\right)\right) + a \cdot x\\
\end{array}double f(double a, double x) {
double r4496680 = a;
double r4496681 = x;
double r4496682 = r4496680 * r4496681;
double r4496683 = exp(r4496682);
double r4496684 = 1.0;
double r4496685 = r4496683 - r4496684;
return r4496685;
}
double f(double a, double x) {
double r4496686 = a;
double r4496687 = x;
double r4496688 = r4496686 * r4496687;
double r4496689 = -0.00015435000108057162;
bool r4496690 = r4496688 <= r4496689;
double r4496691 = exp(r4496688);
double r4496692 = r4496691 * r4496691;
double r4496693 = 1.0;
double r4496694 = r4496692 - r4496693;
double r4496695 = exp(r4496694);
double r4496696 = log(r4496695);
double r4496697 = r4496691 + r4496693;
double r4496698 = r4496696 / r4496697;
double r4496699 = 0.16666666666666666;
double r4496700 = r4496688 * r4496688;
double r4496701 = r4496688 * r4496700;
double r4496702 = r4496699 * r4496701;
double r4496703 = 0.5;
double r4496704 = r4496703 * r4496688;
double r4496705 = r4496688 * r4496704;
double r4496706 = r4496702 + r4496705;
double r4496707 = r4496706 + r4496688;
double r4496708 = r4496690 ? r4496698 : r4496707;
return r4496708;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
if (* a x) < -0.00015435000108057162Initial program 0.1
rmApplied flip--0.1
Simplified0.1
rmApplied add-log-exp0.1
if -0.00015435000108057162 < (* a x) Initial program 44.4
Taylor expanded around 0 14.4
Simplified0.5
Final simplification0.4
herbie shell --seed 2019142
(FPCore (a x)
:name "expax (section 3.5)"
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 1/10) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))