\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\begin{array}{l}
\mathbf{if}\;x \le 1.47988680957016616383087846686716915201 \cdot 10^{-6}:\\
\;\;\;\;\frac{\sqrt[3]{\left(\left(x \cdot x\right) \cdot \left(\left(0.6666666666666667406815349750104360282421 \cdot x - 1\right)\right)\right) \cdot \left(\left(\left(x \cdot x\right) \cdot \left(\left(0.6666666666666667406815349750104360282421 \cdot x - 1\right)\right)\right) \cdot \left(\left(x \cdot x\right) \cdot \left(\left(0.6666666666666667406815349750104360282421 \cdot x - 1\right)\right)\right)\right)} + 2}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(\frac{1}{\varepsilon} + 1\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(e^{\left(-x\right) \cdot \left(1 - \varepsilon\right)}\right)\right) - e^{\left(\varepsilon + 1\right) \cdot \left(-x\right)} \cdot \left(\frac{1}{\varepsilon} - 1\right)}{2}\\
\end{array}double f(double x, double eps) {
double r2137154 = 1.0;
double r2137155 = eps;
double r2137156 = r2137154 / r2137155;
double r2137157 = r2137154 + r2137156;
double r2137158 = r2137154 - r2137155;
double r2137159 = x;
double r2137160 = r2137158 * r2137159;
double r2137161 = -r2137160;
double r2137162 = exp(r2137161);
double r2137163 = r2137157 * r2137162;
double r2137164 = r2137156 - r2137154;
double r2137165 = r2137154 + r2137155;
double r2137166 = r2137165 * r2137159;
double r2137167 = -r2137166;
double r2137168 = exp(r2137167);
double r2137169 = r2137164 * r2137168;
double r2137170 = r2137163 - r2137169;
double r2137171 = 2.0;
double r2137172 = r2137170 / r2137171;
return r2137172;
}
double f(double x, double eps) {
double r2137173 = x;
double r2137174 = 1.4798868095701662e-06;
bool r2137175 = r2137173 <= r2137174;
double r2137176 = r2137173 * r2137173;
double r2137177 = 0.6666666666666667;
double r2137178 = r2137177 * r2137173;
double r2137179 = 1.0;
double r2137180 = r2137178 - r2137179;
double r2137181 = /* ERROR: no posit support in C */;
double r2137182 = /* ERROR: no posit support in C */;
double r2137183 = r2137176 * r2137182;
double r2137184 = r2137183 * r2137183;
double r2137185 = r2137183 * r2137184;
double r2137186 = cbrt(r2137185);
double r2137187 = 2.0;
double r2137188 = r2137186 + r2137187;
double r2137189 = r2137188 / r2137187;
double r2137190 = eps;
double r2137191 = r2137179 / r2137190;
double r2137192 = r2137191 + r2137179;
double r2137193 = -r2137173;
double r2137194 = r2137179 - r2137190;
double r2137195 = r2137193 * r2137194;
double r2137196 = exp(r2137195);
double r2137197 = log1p(r2137196);
double r2137198 = expm1(r2137197);
double r2137199 = r2137192 * r2137198;
double r2137200 = r2137190 + r2137179;
double r2137201 = r2137200 * r2137193;
double r2137202 = exp(r2137201);
double r2137203 = r2137191 - r2137179;
double r2137204 = r2137202 * r2137203;
double r2137205 = r2137199 - r2137204;
double r2137206 = r2137205 / r2137187;
double r2137207 = r2137175 ? r2137189 : r2137206;
return r2137207;
}



Bits error versus x



Bits error versus eps
if x < 1.4798868095701662e-06Initial program 38.1
Taylor expanded around 0 1.4
Simplified1.4
Taylor expanded around 0 1.4
Simplified1.4
rmApplied insert-posit161.4
rmApplied add-cbrt-cube1.4
if 1.4798868095701662e-06 < x Initial program 1.7
rmApplied expm1-log1p-u1.7
Final simplification1.4
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x eps)
:name "NMSE Section 6.1 mentioned, A"
(/ (- (* (+ 1.0 (/ 1.0 eps)) (exp (- (* (- 1.0 eps) x)))) (* (- (/ 1.0 eps) 1.0) (exp (- (* (+ 1.0 eps) x))))) 2.0))