e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -7.7613608644350317 \cdot 10^{-23}:\\
\;\;\;\;\frac{\left({\left(e^{a \cdot x}\right)}^{\frac{3}{2}} + \sqrt{{1}^{3}}\right) \cdot \log \left(e^{{\left(e^{a \cdot x}\right)}^{\frac{3}{2}} - \sqrt{{1}^{3}}}\right)}{e^{a \cdot x} \cdot \left(\sqrt[3]{{\left(e^{a \cdot x}\right)}^{3}} + 1\right) + 1 \cdot 1}\\
\mathbf{elif}\;a \cdot x \le 4.00137271357986445 \cdot 10^{-17}:\\
\;\;\;\;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)\\
\mathbf{else}:\\
\;\;\;\;\frac{{\left(\sqrt[3]{{\left(e^{a \cdot x}\right)}^{3}}\right)}^{3} - {1}^{3}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\
\end{array}double f(double a, double x) {
double r95643 = a;
double r95644 = x;
double r95645 = r95643 * r95644;
double r95646 = exp(r95645);
double r95647 = 1.0;
double r95648 = r95646 - r95647;
return r95648;
}
double f(double a, double x) {
double r95649 = a;
double r95650 = x;
double r95651 = r95649 * r95650;
double r95652 = -7.761360864435032e-23;
bool r95653 = r95651 <= r95652;
double r95654 = exp(r95651);
double r95655 = 1.5;
double r95656 = pow(r95654, r95655);
double r95657 = 1.0;
double r95658 = 3.0;
double r95659 = pow(r95657, r95658);
double r95660 = sqrt(r95659);
double r95661 = r95656 + r95660;
double r95662 = r95656 - r95660;
double r95663 = exp(r95662);
double r95664 = log(r95663);
double r95665 = r95661 * r95664;
double r95666 = pow(r95654, r95658);
double r95667 = cbrt(r95666);
double r95668 = r95667 + r95657;
double r95669 = r95654 * r95668;
double r95670 = r95657 * r95657;
double r95671 = r95669 + r95670;
double r95672 = r95665 / r95671;
double r95673 = 4.0013727135798645e-17;
bool r95674 = r95651 <= r95673;
double r95675 = 0.5;
double r95676 = 2.0;
double r95677 = pow(r95649, r95676);
double r95678 = r95675 * r95677;
double r95679 = r95678 * r95650;
double r95680 = r95649 + r95679;
double r95681 = r95650 * r95680;
double r95682 = 0.16666666666666666;
double r95683 = pow(r95649, r95658);
double r95684 = pow(r95650, r95658);
double r95685 = r95683 * r95684;
double r95686 = r95682 * r95685;
double r95687 = r95681 + r95686;
double r95688 = pow(r95667, r95658);
double r95689 = r95688 - r95659;
double r95690 = r95654 + r95657;
double r95691 = r95654 * r95690;
double r95692 = r95691 + r95670;
double r95693 = r95689 / r95692;
double r95694 = r95674 ? r95687 : r95693;
double r95695 = r95653 ? r95672 : r95694;
return r95695;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.8 |
|---|---|
| Target | 0.2 |
| Herbie | 8.9 |
if (* a x) < -7.761360864435032e-23Initial program 2.1
rmApplied flip3--2.1
Simplified2.1
rmApplied add-cbrt-cube2.1
Simplified2.1
rmApplied add-sqr-sqrt2.1
Applied sqr-pow2.1
Applied difference-of-squares2.1
Simplified2.1
Simplified2.1
rmApplied add-log-exp2.1
Applied add-log-exp2.1
Applied diff-log2.1
Simplified2.1
if -7.761360864435032e-23 < (* a x) < 4.0013727135798645e-17Initial program 45.6
Taylor expanded around 0 12.2
Simplified12.2
if 4.0013727135798645e-17 < (* a x) Initial program 22.5
rmApplied flip3--25.2
Simplified25.2
rmApplied add-cbrt-cube26.0
Simplified26.0
Final simplification8.9
herbie shell --seed 2020021
(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))