\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.9657375756151034 \cdot 10^{-4}:\\
\;\;\;\;\frac{\left(\sqrt{e^{x}} + \sqrt{1}\right) \cdot \log \left(e^{\sqrt{e^{x}} - \sqrt{1}}\right)}{x}\\
\mathbf{else}:\\
\;\;\;\;\frac{{x}^{2} \cdot \left(x \cdot \frac{1}{6} + \frac{1}{2}\right) + x}{x}\\
\end{array}double f(double x) {
double r81443 = x;
double r81444 = exp(r81443);
double r81445 = 1.0;
double r81446 = r81444 - r81445;
double r81447 = r81446 / r81443;
return r81447;
}
double f(double x) {
double r81448 = x;
double r81449 = -0.00019657375756151034;
bool r81450 = r81448 <= r81449;
double r81451 = exp(r81448);
double r81452 = sqrt(r81451);
double r81453 = 1.0;
double r81454 = sqrt(r81453);
double r81455 = r81452 + r81454;
double r81456 = r81452 - r81454;
double r81457 = exp(r81456);
double r81458 = log(r81457);
double r81459 = r81455 * r81458;
double r81460 = r81459 / r81448;
double r81461 = 2.0;
double r81462 = pow(r81448, r81461);
double r81463 = 0.16666666666666666;
double r81464 = r81448 * r81463;
double r81465 = 0.5;
double r81466 = r81464 + r81465;
double r81467 = r81462 * r81466;
double r81468 = r81467 + r81448;
double r81469 = r81468 / r81448;
double r81470 = r81450 ? r81460 : r81469;
return r81470;
}




Bits error versus x
Results
| Original | 39.6 |
|---|---|
| Target | 40.1 |
| Herbie | 0.3 |
if x < -0.00019657375756151034Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied add-sqr-sqrt0.1
Applied difference-of-squares0.1
rmApplied add-log-exp0.1
Applied add-log-exp0.1
Applied diff-log0.1
Simplified0.1
if -0.00019657375756151034 < x Initial program 60.2
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.3
herbie shell --seed 2020065
(FPCore (x)
:name "Kahan's exp quotient"
:precision binary64
:herbie-target
(if (and (< x 1) (> x -1)) (/ (- (exp x) 1) (log (exp x))) (/ (- (exp x) 1) x))
(/ (- (exp x) 1) x))