\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -97.23298484104901717728353105485439300537 \lor \neg \left(x \le 104.1495985043723351282096700742840766907\right):\\
\;\;\;\;\left(\frac{2}{{x}^{5}} + \frac{2}{{x}^{7}}\right) + \frac{\frac{2}{x}}{x \cdot x}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{{\left(\frac{1}{x + 1}\right)}^{3}} - \frac{2}{x}\right) + \frac{1}{x - 1}\\
\end{array}double f(double x) {
double r126302 = 1.0;
double r126303 = x;
double r126304 = r126303 + r126302;
double r126305 = r126302 / r126304;
double r126306 = 2.0;
double r126307 = r126306 / r126303;
double r126308 = r126305 - r126307;
double r126309 = r126303 - r126302;
double r126310 = r126302 / r126309;
double r126311 = r126308 + r126310;
return r126311;
}
double f(double x) {
double r126312 = x;
double r126313 = -97.23298484104902;
bool r126314 = r126312 <= r126313;
double r126315 = 104.14959850437234;
bool r126316 = r126312 <= r126315;
double r126317 = !r126316;
bool r126318 = r126314 || r126317;
double r126319 = 2.0;
double r126320 = 5.0;
double r126321 = pow(r126312, r126320);
double r126322 = r126319 / r126321;
double r126323 = 7.0;
double r126324 = pow(r126312, r126323);
double r126325 = r126319 / r126324;
double r126326 = r126322 + r126325;
double r126327 = r126319 / r126312;
double r126328 = r126312 * r126312;
double r126329 = r126327 / r126328;
double r126330 = r126326 + r126329;
double r126331 = 1.0;
double r126332 = r126312 + r126331;
double r126333 = r126331 / r126332;
double r126334 = 3.0;
double r126335 = pow(r126333, r126334);
double r126336 = cbrt(r126335);
double r126337 = r126336 - r126327;
double r126338 = r126312 - r126331;
double r126339 = r126331 / r126338;
double r126340 = r126337 + r126339;
double r126341 = r126318 ? r126330 : r126340;
return r126341;
}




Bits error versus x
Results
| Original | 9.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.1 |
if x < -97.23298484104902 or 104.14959850437234 < x Initial program 19.6
Taylor expanded around inf 0.5
Simplified0.5
rmApplied cube-mult0.5
Applied associate-/r*0.1
if -97.23298484104902 < x < 104.14959850437234Initial program 0.0
rmApplied add-cbrt-cube0.0
Applied add-cbrt-cube0.0
Applied cbrt-undiv0.0
Simplified0.0
Final simplification0.1
herbie shell --seed 2019325 +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))))