\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 r112027 = 1.0;
double r112028 = x;
double r112029 = r112028 + r112027;
double r112030 = r112027 / r112029;
double r112031 = 2.0;
double r112032 = r112031 / r112028;
double r112033 = r112030 - r112032;
double r112034 = r112028 - r112027;
double r112035 = r112027 / r112034;
double r112036 = r112033 + r112035;
return r112036;
}
double f(double x) {
double r112037 = x;
double r112038 = -97.23298484104902;
bool r112039 = r112037 <= r112038;
double r112040 = 104.14959850437234;
bool r112041 = r112037 <= r112040;
double r112042 = !r112041;
bool r112043 = r112039 || r112042;
double r112044 = 2.0;
double r112045 = 5.0;
double r112046 = pow(r112037, r112045);
double r112047 = r112044 / r112046;
double r112048 = 7.0;
double r112049 = pow(r112037, r112048);
double r112050 = r112044 / r112049;
double r112051 = r112047 + r112050;
double r112052 = r112044 / r112037;
double r112053 = r112037 * r112037;
double r112054 = r112052 / r112053;
double r112055 = r112051 + r112054;
double r112056 = 1.0;
double r112057 = r112037 + r112056;
double r112058 = r112056 / r112057;
double r112059 = 3.0;
double r112060 = pow(r112058, r112059);
double r112061 = cbrt(r112060);
double r112062 = r112061 - r112052;
double r112063 = r112037 - r112056;
double r112064 = r112056 / r112063;
double r112065 = r112062 + r112064;
double r112066 = r112043 ? r112055 : r112065;
return r112066;
}




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))))