e^{a \cdot x} - 1\begin{array}{l}
\mathbf{if}\;a \cdot x \le -2.854896315070200588929145535786717914183 \cdot 10^{-12}:\\
\;\;\;\;\left(\sqrt[3]{\log \left(e^{e^{a \cdot x} - 1}\right)} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}\\
\mathbf{elif}\;a \cdot x \le 3.077927021552124355804512938132032171833 \cdot 10^{-24}:\\
\;\;\;\;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}:\\
\;\;\;\;\left(\sqrt[3]{\sqrt{e^{a \cdot x}} + \sqrt{1}} \cdot \sqrt[3]{\sqrt{e^{a \cdot x}} + \sqrt{1}}\right) \cdot \left(\frac{\sqrt[3]{\sqrt{e^{a \cdot x}} \cdot \sqrt{e^{a \cdot x}} - \sqrt{1} \cdot \sqrt{1}}}{\sqrt[3]{\sqrt{e^{a \cdot x}} - \sqrt{1}}} \cdot \left(\sqrt{e^{a \cdot x}} - \sqrt{1}\right)\right)\\
\end{array}double f(double a, double x) {
double r59114 = a;
double r59115 = x;
double r59116 = r59114 * r59115;
double r59117 = exp(r59116);
double r59118 = 1.0;
double r59119 = r59117 - r59118;
return r59119;
}
double f(double a, double x) {
double r59120 = a;
double r59121 = x;
double r59122 = r59120 * r59121;
double r59123 = -2.8548963150702006e-12;
bool r59124 = r59122 <= r59123;
double r59125 = exp(r59122);
double r59126 = 1.0;
double r59127 = r59125 - r59126;
double r59128 = exp(r59127);
double r59129 = log(r59128);
double r59130 = cbrt(r59129);
double r59131 = cbrt(r59127);
double r59132 = r59130 * r59131;
double r59133 = r59132 * r59131;
double r59134 = 3.0779270215521244e-24;
bool r59135 = r59122 <= r59134;
double r59136 = 0.5;
double r59137 = 2.0;
double r59138 = pow(r59120, r59137);
double r59139 = r59136 * r59138;
double r59140 = r59139 * r59121;
double r59141 = r59120 + r59140;
double r59142 = r59121 * r59141;
double r59143 = 0.16666666666666666;
double r59144 = 3.0;
double r59145 = pow(r59120, r59144);
double r59146 = pow(r59121, r59144);
double r59147 = r59145 * r59146;
double r59148 = r59143 * r59147;
double r59149 = r59142 + r59148;
double r59150 = sqrt(r59125);
double r59151 = sqrt(r59126);
double r59152 = r59150 + r59151;
double r59153 = cbrt(r59152);
double r59154 = r59153 * r59153;
double r59155 = r59150 * r59150;
double r59156 = r59151 * r59151;
double r59157 = r59155 - r59156;
double r59158 = cbrt(r59157);
double r59159 = r59150 - r59151;
double r59160 = cbrt(r59159);
double r59161 = r59158 / r59160;
double r59162 = r59161 * r59159;
double r59163 = r59154 * r59162;
double r59164 = r59135 ? r59149 : r59163;
double r59165 = r59124 ? r59133 : r59164;
return r59165;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 9.4 |
if (* a x) < -2.8548963150702006e-12Initial program 0.6
rmApplied add-cube-cbrt0.6
rmApplied add-log-exp0.6
Applied add-log-exp0.6
Applied diff-log0.6
Simplified0.6
if -2.8548963150702006e-12 < (* a x) < 3.0779270215521244e-24Initial program 44.7
Taylor expanded around 0 12.9
Simplified12.9
if 3.0779270215521244e-24 < (* a x) Initial program 33.6
rmApplied add-sqr-sqrt33.6
Applied add-sqr-sqrt34.5
Applied difference-of-squares34.4
rmApplied add-cube-cbrt34.4
Applied associate-*l*34.4
rmApplied flip-+35.1
Applied cbrt-div35.1
Final simplification9.4
herbie shell --seed 2019298
(FPCore (a x)
:name "expax (section 3.5)"
:precision binary64
:herbie-expected 14
:herbie-target
(if (< (fabs (* a x)) 0.10000000000000001) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))
(- (exp (* a x)) 1))