e^{a \cdot x} - 1.0\begin{array}{l}
\mathbf{if}\;x \le -4.978355442950795 \cdot 10^{+85}:\\
\;\;\;\;\log \left(e^{\sqrt{e^{a \cdot x}} \cdot \sqrt{e^{a \cdot x}} - 1.0}\right)\\
\mathbf{elif}\;x \le -2.7809807833631145 \cdot 10^{-53}:\\
\;\;\;\;a \cdot x + \left(\left(a \cdot x\right) \cdot \left(\left(a \cdot x\right) \cdot \frac{1}{2}\right) + \left(\left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right) \cdot \left(a \cdot x\right)\right) \cdot \frac{1}{6}\right)\\
\mathbf{elif}\;x \le -5.060005299698439 \cdot 10^{-87}:\\
\;\;\;\;\left(\sqrt[3]{\log \left(e^{e^{a \cdot x} - 1.0}\right)} \cdot \sqrt[3]{\log \left(e^{e^{a \cdot x} - 1.0}\right)}\right) \cdot \sqrt[3]{\log \left(e^{e^{a \cdot x} - 1.0}\right)}\\
\mathbf{elif}\;x \le 3.983314979150684 \cdot 10^{+121}:\\
\;\;\;\;\left(\left(\left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right) \cdot \left(a \cdot x\right)\right) \cdot \frac{1}{6} + a \cdot x\right) + \frac{\left(a \cdot x\right) \cdot \left(a \cdot x\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\frac{e^{e^{a \cdot x}}}{e^{1.0}}\right)\\
\end{array}double f(double a, double x) {
double r3559509 = a;
double r3559510 = x;
double r3559511 = r3559509 * r3559510;
double r3559512 = exp(r3559511);
double r3559513 = 1.0;
double r3559514 = r3559512 - r3559513;
return r3559514;
}
double f(double a, double x) {
double r3559515 = x;
double r3559516 = -4.978355442950795e+85;
bool r3559517 = r3559515 <= r3559516;
double r3559518 = a;
double r3559519 = r3559518 * r3559515;
double r3559520 = exp(r3559519);
double r3559521 = sqrt(r3559520);
double r3559522 = r3559521 * r3559521;
double r3559523 = 1.0;
double r3559524 = r3559522 - r3559523;
double r3559525 = exp(r3559524);
double r3559526 = log(r3559525);
double r3559527 = -2.7809807833631145e-53;
bool r3559528 = r3559515 <= r3559527;
double r3559529 = 0.5;
double r3559530 = r3559519 * r3559529;
double r3559531 = r3559519 * r3559530;
double r3559532 = r3559519 * r3559519;
double r3559533 = r3559532 * r3559519;
double r3559534 = 0.16666666666666666;
double r3559535 = r3559533 * r3559534;
double r3559536 = r3559531 + r3559535;
double r3559537 = r3559519 + r3559536;
double r3559538 = -5.060005299698439e-87;
bool r3559539 = r3559515 <= r3559538;
double r3559540 = r3559520 - r3559523;
double r3559541 = exp(r3559540);
double r3559542 = log(r3559541);
double r3559543 = cbrt(r3559542);
double r3559544 = r3559543 * r3559543;
double r3559545 = r3559544 * r3559543;
double r3559546 = 3.983314979150684e+121;
bool r3559547 = r3559515 <= r3559546;
double r3559548 = r3559535 + r3559519;
double r3559549 = 2.0;
double r3559550 = r3559532 / r3559549;
double r3559551 = r3559548 + r3559550;
double r3559552 = exp(r3559520);
double r3559553 = exp(r3559523);
double r3559554 = r3559552 / r3559553;
double r3559555 = log(r3559554);
double r3559556 = r3559547 ? r3559551 : r3559555;
double r3559557 = r3559539 ? r3559545 : r3559556;
double r3559558 = r3559528 ? r3559537 : r3559557;
double r3559559 = r3559517 ? r3559526 : r3559558;
return r3559559;
}




Bits error versus a




Bits error versus x
Results
| Original | 29.5 |
|---|---|
| Target | 0.2 |
| Herbie | 14.1 |
if x < -4.978355442950795e+85Initial program 18.2
rmApplied add-log-exp18.2
Applied add-log-exp18.4
Applied diff-log18.4
Simplified18.3
rmApplied add-sqr-sqrt18.4
if -4.978355442950795e+85 < x < -2.7809807833631145e-53Initial program 39.5
Taylor expanded around 0 19.7
Simplified19.7
if -2.7809807833631145e-53 < x < -5.060005299698439e-87Initial program 35.6
rmApplied add-log-exp35.6
Applied add-log-exp35.6
Applied diff-log35.6
Simplified35.6
rmApplied add-cube-cbrt35.6
if -5.060005299698439e-87 < x < 3.983314979150684e+121Initial program 33.7
rmApplied add-log-exp33.7
Applied add-log-exp33.7
Applied diff-log33.8
Simplified33.7
Taylor expanded around 0 19.6
Simplified11.0
if 3.983314979150684e+121 < x Initial program 13.3
rmApplied add-log-exp13.3
Applied add-log-exp13.5
Applied diff-log13.5
Simplified13.4
rmApplied exp-diff13.5
Final simplification14.1
herbie shell --seed 2019165
(FPCore (a x)
:name "expax (section 3.5)"
: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))