\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -115.116316502083535 \lor \neg \left(x \le 120.64077220743235\right):\\
\;\;\;\;\frac{2}{{x}^{5}} + \left(\frac{2}{{x}^{3}} + \frac{2}{{x}^{7}}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{x + 1}, \frac{1 \cdot x - \left(x + 1\right) \cdot 2}{x}, \frac{1}{x - 1}\right)\\
\end{array}double f(double x) {
double r130369 = 1.0;
double r130370 = x;
double r130371 = r130370 + r130369;
double r130372 = r130369 / r130371;
double r130373 = 2.0;
double r130374 = r130373 / r130370;
double r130375 = r130372 - r130374;
double r130376 = r130370 - r130369;
double r130377 = r130369 / r130376;
double r130378 = r130375 + r130377;
return r130378;
}
double f(double x) {
double r130379 = x;
double r130380 = -115.11631650208354;
bool r130381 = r130379 <= r130380;
double r130382 = 120.64077220743235;
bool r130383 = r130379 <= r130382;
double r130384 = !r130383;
bool r130385 = r130381 || r130384;
double r130386 = 2.0;
double r130387 = 5.0;
double r130388 = pow(r130379, r130387);
double r130389 = r130386 / r130388;
double r130390 = 3.0;
double r130391 = pow(r130379, r130390);
double r130392 = r130386 / r130391;
double r130393 = 7.0;
double r130394 = pow(r130379, r130393);
double r130395 = r130386 / r130394;
double r130396 = r130392 + r130395;
double r130397 = r130389 + r130396;
double r130398 = 1.0;
double r130399 = 1.0;
double r130400 = r130379 + r130399;
double r130401 = r130398 / r130400;
double r130402 = r130399 * r130379;
double r130403 = r130400 * r130386;
double r130404 = r130402 - r130403;
double r130405 = r130404 / r130379;
double r130406 = r130379 - r130399;
double r130407 = r130399 / r130406;
double r130408 = fma(r130401, r130405, r130407);
double r130409 = r130385 ? r130397 : r130408;
return r130409;
}




Bits error versus x
| Original | 9.5 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
if x < -115.11631650208354 or 120.64077220743235 < x Initial program 19.1
rmApplied frac-sub52.0
Taylor expanded around inf 0.5
Simplified0.5
if -115.11631650208354 < x < 120.64077220743235Initial program 0.0
rmApplied frac-sub0.0
rmApplied *-un-lft-identity0.0
Applied times-frac0.1
Applied fma-def0.0
Final simplification0.3
herbie shell --seed 2020047 +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))))