e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.924193346987677885938052739847603511691 \cdot 10^{-7}:\\
\;\;\;\;\log \left(\sqrt{e^{e^{a \cdot x} - 1}}\right) + \log \left(\sqrt{e^{e^{a \cdot x} - 1}}\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right)\\
\end{array}double f(double a, double x) {
double r154922 = a;
double r154923 = x;
double r154924 = r154922 * r154923;
double r154925 = exp(r154924);
double r154926 = 1.0;
double r154927 = r154925 - r154926;
return r154927;
}
double f(double a, double x) {
double r154928 = a;
double r154929 = x;
double r154930 = r154928 * r154929;
double r154931 = -1.924193346987678e-07;
bool r154932 = r154930 <= r154931;
double r154933 = exp(r154930);
double r154934 = 1.0;
double r154935 = r154933 - r154934;
double r154936 = exp(r154935);
double r154937 = sqrt(r154936);
double r154938 = log(r154937);
double r154939 = r154938 + r154938;
double r154940 = 0.5;
double r154941 = 2.0;
double r154942 = pow(r154928, r154941);
double r154943 = r154940 * r154942;
double r154944 = r154943 * r154929;
double r154945 = r154928 + r154944;
double r154946 = r154929 * r154945;
double r154947 = 0.16666666666666666;
double r154948 = 3.0;
double r154949 = pow(r154928, r154948);
double r154950 = pow(r154929, r154948);
double r154951 = r154949 * r154950;
double r154952 = r154947 * r154951;
double r154953 = r154946 + r154952;
double r154954 = r154932 ? r154939 : r154953;
return r154954;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.9 |
|---|---|
| Target | 0.2 |
| Herbie | 9.5 |
if (* a x) < -1.924193346987678e-07Initial program 0.2
rmApplied add-log-exp0.2
Applied add-log-exp0.2
Applied diff-log0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Applied log-prod0.2
if -1.924193346987678e-07 < (* a x) Initial program 44.7
Taylor expanded around 0 14.2
Simplified14.2
Final simplification9.5
herbie shell --seed 2019354
(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))