\frac{e^{x} - 1}{x}\begin{array}{l}
\mathbf{if}\;x \le -1.681655298641986193575875718764223165635 \cdot 10^{-4}:\\
\;\;\;\;\frac{\log \left(e^{{\left(e^{x}\right)}^{2} - 1 \cdot 1}\right)}{x \cdot \mathsf{fma}\left(\sqrt[3]{e^{x}} \cdot \sqrt[3]{e^{x}}, \sqrt[3]{e^{x}}, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(x, \mathsf{fma}\left(\frac{1}{6}, x, \frac{1}{2}\right), 1\right)\\
\end{array}double f(double x) {
double r64946 = x;
double r64947 = exp(r64946);
double r64948 = 1.0;
double r64949 = r64947 - r64948;
double r64950 = r64949 / r64946;
return r64950;
}
double f(double x) {
double r64951 = x;
double r64952 = -0.00016816552986419862;
bool r64953 = r64951 <= r64952;
double r64954 = exp(r64951);
double r64955 = 2.0;
double r64956 = pow(r64954, r64955);
double r64957 = 1.0;
double r64958 = r64957 * r64957;
double r64959 = r64956 - r64958;
double r64960 = exp(r64959);
double r64961 = log(r64960);
double r64962 = cbrt(r64954);
double r64963 = r64962 * r64962;
double r64964 = fma(r64963, r64962, r64957);
double r64965 = r64951 * r64964;
double r64966 = r64961 / r64965;
double r64967 = 0.16666666666666666;
double r64968 = 0.5;
double r64969 = fma(r64967, r64951, r64968);
double r64970 = 1.0;
double r64971 = fma(r64951, r64969, r64970);
double r64972 = r64953 ? r64966 : r64971;
return r64972;
}




Bits error versus x
| Original | 40.3 |
|---|---|
| Target | 40.8 |
| Herbie | 0.3 |
if x < -0.00016816552986419862Initial program 0.1
rmApplied flip--0.1
Applied associate-/l/0.1
rmApplied add-log-exp0.1
Applied add-log-exp0.1
Applied diff-log0.1
Simplified0.1
rmApplied add-cube-cbrt0.1
Applied fma-def0.1
if -0.00016816552986419862 < x Initial program 60.3
Taylor expanded around 0 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2019350 +o rules:numerics
(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))