e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \leq -24.510704068554325:\\
\;\;\;\;\sqrt[3]{e^{a \cdot x}} \cdot \left(\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}\right) - 1\\
\mathbf{else}:\\
\;\;\;\;a \cdot x + \sqrt[3]{0.125 \cdot {\left(a \cdot x\right)}^{6}}\\
\end{array}(FPCore (a x) :precision binary64 (- (exp (* a x)) 1.0))
(FPCore (a x)
:precision binary64
(if (<= (* a x) -24.510704068554325)
(-
(* (cbrt (exp (* a x))) (* (cbrt (exp (* a x))) (cbrt (exp (* a x)))))
1.0)
(+ (* a x) (cbrt (* 0.125 (pow (* a x) 6.0))))))double code(double a, double x) {
return exp(a * x) - 1.0;
}
double code(double a, double x) {
double tmp;
if ((a * x) <= -24.510704068554325) {
tmp = (cbrt(exp(a * x)) * (cbrt(exp(a * x)) * cbrt(exp(a * x)))) - 1.0;
} else {
tmp = (a * x) + cbrt(0.125 * pow((a * x), 6.0));
}
return tmp;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.7 |
|---|---|
| Target | 0.2 |
| Herbie | 0.7 |
if (*.f64 a x) < -24.510704068554325Initial program 0
rmApplied add-cube-cbrt_binary64_14770
if -24.510704068554325 < (*.f64 a x) Initial program 44.4
Taylor expanded around 0 9.1
Simplified5.3
rmApplied associate-*r*_binary64_13821.1
rmApplied distribute-rgt-in_binary64_13921.1
Simplified1.1
Simplified1.1
rmApplied add-cbrt-cube_binary64_14781.1
Simplified1.1
Final simplification0.7
herbie shell --seed 2021007
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
: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))