\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 -288.66198405205364:\\
\;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right)\\
\mathbf{elif}\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right) \le 2.0679515313825692 \cdot 10^{-25}:\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{\frac{2}{x}}{x \cdot x} + \frac{2}{{x}^{5}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{x - 1} + \left(\frac{1}{x + 1} - \frac{2}{x}\right)\\
\end{array}double f(double x) {
double r3906267 = 1.0;
double r3906268 = x;
double r3906269 = r3906268 + r3906267;
double r3906270 = r3906267 / r3906269;
double r3906271 = 2.0;
double r3906272 = r3906271 / r3906268;
double r3906273 = r3906270 - r3906272;
double r3906274 = r3906268 - r3906267;
double r3906275 = r3906267 / r3906274;
double r3906276 = r3906273 + r3906275;
return r3906276;
}
double f(double x) {
double r3906277 = 1.0;
double r3906278 = x;
double r3906279 = r3906278 - r3906277;
double r3906280 = r3906277 / r3906279;
double r3906281 = r3906278 + r3906277;
double r3906282 = r3906277 / r3906281;
double r3906283 = 2.0;
double r3906284 = r3906283 / r3906278;
double r3906285 = r3906282 - r3906284;
double r3906286 = r3906280 + r3906285;
double r3906287 = -288.66198405205364;
bool r3906288 = r3906286 <= r3906287;
double r3906289 = 2.0679515313825692e-25;
bool r3906290 = r3906286 <= r3906289;
double r3906291 = 7.0;
double r3906292 = pow(r3906278, r3906291);
double r3906293 = r3906283 / r3906292;
double r3906294 = r3906278 * r3906278;
double r3906295 = r3906284 / r3906294;
double r3906296 = 5.0;
double r3906297 = pow(r3906278, r3906296);
double r3906298 = r3906283 / r3906297;
double r3906299 = r3906295 + r3906298;
double r3906300 = r3906293 + r3906299;
double r3906301 = r3906290 ? r3906300 : r3906286;
double r3906302 = r3906288 ? r3906286 : r3906301;
return r3906302;
}




Bits error versus x
Results
| Original | 10.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.4 |
if (+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))) < -288.66198405205364 or 2.0679515313825692e-25 < (+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))) Initial program 0.4
if -288.66198405205364 < (+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))) < 2.0679515313825692e-25Initial program 20.2
Taylor expanded around inf 0.7
Simplified0.4
Final simplification0.4
herbie shell --seed 2019162 +o rules:numerics
(FPCore (x)
:name "3frac (problem 3.3.3)"
:herbie-target
(/ 2 (* x (- (* x x) 1)))
(+ (- (/ 1 (+ x 1)) (/ 2 x)) (/ 1 (- x 1))))