\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -139.6738048598509180919791106134653091431 \lor \neg \left(x \le 129.3018377268199685659055830910801887512\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, \frac{2}{{x}^{3}}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(1 \cdot x - \left(x + 1\right) \cdot 2, x - 1, \left(\left(x + 1\right) \cdot x\right) \cdot 1\right)}{\left(\left(x + 1\right) \cdot x\right) \cdot \left(x - 1\right)}\\
\end{array}double f(double x) {
double r244536 = 1.0;
double r244537 = x;
double r244538 = r244537 + r244536;
double r244539 = r244536 / r244538;
double r244540 = 2.0;
double r244541 = r244540 / r244537;
double r244542 = r244539 - r244541;
double r244543 = r244537 - r244536;
double r244544 = r244536 / r244543;
double r244545 = r244542 + r244544;
return r244545;
}
double f(double x) {
double r244546 = x;
double r244547 = -139.67380485985092;
bool r244548 = r244546 <= r244547;
double r244549 = 129.30183772681997;
bool r244550 = r244546 <= r244549;
double r244551 = !r244550;
bool r244552 = r244548 || r244551;
double r244553 = 2.0;
double r244554 = 1.0;
double r244555 = 7.0;
double r244556 = pow(r244546, r244555);
double r244557 = r244554 / r244556;
double r244558 = 5.0;
double r244559 = pow(r244546, r244558);
double r244560 = r244554 / r244559;
double r244561 = 3.0;
double r244562 = pow(r244546, r244561);
double r244563 = r244553 / r244562;
double r244564 = fma(r244553, r244560, r244563);
double r244565 = fma(r244553, r244557, r244564);
double r244566 = 1.0;
double r244567 = r244566 * r244546;
double r244568 = r244546 + r244566;
double r244569 = r244568 * r244553;
double r244570 = r244567 - r244569;
double r244571 = r244546 - r244566;
double r244572 = r244568 * r244546;
double r244573 = r244572 * r244566;
double r244574 = fma(r244570, r244571, r244573);
double r244575 = r244572 * r244571;
double r244576 = r244574 / r244575;
double r244577 = r244552 ? r244565 : r244576;
return r244577;
}




Bits error versus x
| Original | 9.8 |
|---|---|
| Target | 0.3 |
| Herbie | 0.3 |
if x < -139.67380485985092 or 129.30183772681997 < x Initial program 19.9
Taylor expanded around inf 0.6
Simplified0.6
if -139.67380485985092 < x < 129.30183772681997Initial program 0.0
rmApplied frac-sub0.1
Applied frac-add0.0
Simplified0.1
Final simplification0.3
herbie shell --seed 2019352 +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))))