\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -111.6420365632021:\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{\frac{\frac{2}{x}}{x}}{x} + \frac{2}{{x}^{5}}\right)\\
\mathbf{elif}\;x \le 108.84391371430509:\\
\;\;\;\;\left(\frac{1}{1 + x} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{\frac{2}{x}}{x \cdot x} + \frac{2}{{x}^{5}}\right) + \frac{2}{{x}^{7}}\\
\end{array}double f(double x) {
double r1587261 = 1.0;
double r1587262 = x;
double r1587263 = r1587262 + r1587261;
double r1587264 = r1587261 / r1587263;
double r1587265 = 2.0;
double r1587266 = r1587265 / r1587262;
double r1587267 = r1587264 - r1587266;
double r1587268 = r1587262 - r1587261;
double r1587269 = r1587261 / r1587268;
double r1587270 = r1587267 + r1587269;
return r1587270;
}
double f(double x) {
double r1587271 = x;
double r1587272 = -111.6420365632021;
bool r1587273 = r1587271 <= r1587272;
double r1587274 = 2.0;
double r1587275 = 7.0;
double r1587276 = pow(r1587271, r1587275);
double r1587277 = r1587274 / r1587276;
double r1587278 = r1587274 / r1587271;
double r1587279 = r1587278 / r1587271;
double r1587280 = r1587279 / r1587271;
double r1587281 = 5.0;
double r1587282 = pow(r1587271, r1587281);
double r1587283 = r1587274 / r1587282;
double r1587284 = r1587280 + r1587283;
double r1587285 = r1587277 + r1587284;
double r1587286 = 108.84391371430509;
bool r1587287 = r1587271 <= r1587286;
double r1587288 = 1.0;
double r1587289 = r1587288 + r1587271;
double r1587290 = r1587288 / r1587289;
double r1587291 = r1587290 - r1587278;
double r1587292 = r1587271 - r1587288;
double r1587293 = r1587288 / r1587292;
double r1587294 = r1587291 + r1587293;
double r1587295 = r1587271 * r1587271;
double r1587296 = r1587278 / r1587295;
double r1587297 = r1587296 + r1587283;
double r1587298 = r1587297 + r1587277;
double r1587299 = r1587287 ? r1587294 : r1587298;
double r1587300 = r1587273 ? r1587285 : r1587299;
return r1587300;
}




Bits error versus x
Results
| Original | 9.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.1 |
if x < -111.6420365632021Initial program 19.6
Taylor expanded around inf 0.6
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied times-frac0.1
rmApplied associate-*r/0.1
Simplified0.1
rmApplied associate-/r*0.1
if -111.6420365632021 < x < 108.84391371430509Initial program 0.0
if 108.84391371430509 < x Initial program 19.4
Taylor expanded around inf 0.6
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied times-frac0.1
rmApplied associate-*r/0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019152 +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))))