\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le -0.022948797585861574 \lor \neg \left(\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1} \le 6.46235 \cdot 10^{-27}\right):\\
\;\;\;\;\left(\sqrt[3]{{\left(\frac{1}{x + 1}\right)}^{3}} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot {x}^{\left(-3\right)}\right)\right)\\
\end{array}double f(double x) {
double r122290 = 1.0;
double r122291 = x;
double r122292 = r122291 + r122290;
double r122293 = r122290 / r122292;
double r122294 = 2.0;
double r122295 = r122294 / r122291;
double r122296 = r122293 - r122295;
double r122297 = r122291 - r122290;
double r122298 = r122290 / r122297;
double r122299 = r122296 + r122298;
return r122299;
}
double f(double x) {
double r122300 = 1.0;
double r122301 = x;
double r122302 = r122301 + r122300;
double r122303 = r122300 / r122302;
double r122304 = 2.0;
double r122305 = r122304 / r122301;
double r122306 = r122303 - r122305;
double r122307 = r122301 - r122300;
double r122308 = r122300 / r122307;
double r122309 = r122306 + r122308;
double r122310 = -0.022948797585861574;
bool r122311 = r122309 <= r122310;
double r122312 = 6.462348535570529e-27;
bool r122313 = r122309 <= r122312;
double r122314 = !r122313;
bool r122315 = r122311 || r122314;
double r122316 = 3.0;
double r122317 = pow(r122303, r122316);
double r122318 = cbrt(r122317);
double r122319 = r122318 - r122305;
double r122320 = r122319 + r122308;
double r122321 = 1.0;
double r122322 = 7.0;
double r122323 = pow(r122301, r122322);
double r122324 = r122321 / r122323;
double r122325 = 5.0;
double r122326 = pow(r122301, r122325);
double r122327 = r122321 / r122326;
double r122328 = -r122316;
double r122329 = pow(r122301, r122328);
double r122330 = r122304 * r122329;
double r122331 = fma(r122304, r122327, r122330);
double r122332 = fma(r122304, r122324, r122331);
double r122333 = r122315 ? r122320 : r122332;
return r122333;
}




Bits error versus x
| Original | 9.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -0.022948797585861574 or 6.462348535570529e-27 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) Initial program 0.4
rmApplied add-cbrt-cube0.4
Applied add-cbrt-cube0.4
Applied cbrt-undiv0.4
Simplified0.4
if -0.022948797585861574 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 6.462348535570529e-27Initial program 19.2
rmApplied add-cbrt-cube59.6
Applied add-cbrt-cube59.6
Applied cbrt-undiv59.8
Simplified59.8
Taylor expanded around inf 0.5
Simplified0.5
rmApplied pow-flip0.1
Final simplification0.2
herbie shell --seed 2020039 +o rules:numerics
(FPCore (x)
:name "3frac (problem 3.3.3)"
:precision binary64
:herbie-target
(/ 2 (* x (- (* x x) 1)))
(+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))))