\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le -7201661234884042:\\
\;\;\;\;\left(1 - \mathsf{fma}\left(1, x, \frac{2}{x}\right)\right) + \frac{1}{x - 1}\\
\mathbf{elif}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le 1.398114847419446027387834874389227479696 \cdot 10^{-9}:\\
\;\;\;\;\frac{2}{{x}^{5}} + \left(\frac{2}{{x}^{7}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right)\\
\end{array}double f(double x) {
double r4431388 = 1.0;
double r4431389 = x;
double r4431390 = r4431389 + r4431388;
double r4431391 = r4431388 / r4431390;
double r4431392 = 2.0;
double r4431393 = r4431392 / r4431389;
double r4431394 = r4431391 - r4431393;
double r4431395 = r4431389 - r4431388;
double r4431396 = r4431388 / r4431395;
double r4431397 = r4431394 + r4431396;
return r4431397;
}
double f(double x) {
double r4431398 = 1.0;
double r4431399 = x;
double r4431400 = r4431399 - r4431398;
double r4431401 = r4431398 / r4431400;
double r4431402 = r4431399 + r4431398;
double r4431403 = r4431398 / r4431402;
double r4431404 = 2.0;
double r4431405 = r4431404 / r4431399;
double r4431406 = r4431403 - r4431405;
double r4431407 = r4431401 + r4431406;
double r4431408 = -7201661234884042.0;
bool r4431409 = r4431407 <= r4431408;
double r4431410 = fma(r4431398, r4431399, r4431405);
double r4431411 = r4431398 - r4431410;
double r4431412 = r4431411 + r4431401;
double r4431413 = 1.398114847419446e-09;
bool r4431414 = r4431407 <= r4431413;
double r4431415 = 5.0;
double r4431416 = pow(r4431399, r4431415);
double r4431417 = r4431404 / r4431416;
double r4431418 = 7.0;
double r4431419 = pow(r4431399, r4431418);
double r4431420 = r4431404 / r4431419;
double r4431421 = r4431405 / r4431399;
double r4431422 = r4431421 / r4431399;
double r4431423 = r4431420 + r4431422;
double r4431424 = r4431417 + r4431423;
double r4431425 = r4431414 ? r4431424 : r4431407;
double r4431426 = r4431409 ? r4431412 : r4431425;
return r4431426;
}




Bits error versus x
| Original | 9.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.9 |
if (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < -7201661234884042.0Initial program 0.0
Taylor expanded around 0 0
Simplified0
if -7201661234884042.0 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) < 1.398114847419446e-09Initial program 19.2
Taylor expanded around inf 2.2
Simplified1.8
rmApplied associate-/r*1.8
if 1.398114847419446e-09 < (+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))) Initial program 0.1
Final simplification0.9
herbie shell --seed 2019192 +o rules:numerics
(FPCore (x)
:name "3frac (problem 3.3.3)"
:herbie-target
(/ 2.0 (* x (- (* x x) 1.0)))
(+ (- (/ 1.0 (+ x 1.0)) (/ 2.0 x)) (/ 1.0 (- x 1.0))))