\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -101.7757910098267331022725556977093219757 \lor \neg \left(x \le 98.00054950125780806047259829938411712646\right):\\
\;\;\;\;\frac{2}{{x}^{7}} + \left(\frac{2}{{x}^{5}} + \frac{\frac{\frac{2}{x}}{x}}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\sqrt[3]{\frac{1}{x + 1}} \cdot \sqrt[3]{\frac{1}{x + 1}}, \sqrt[3]{\frac{1}{x + 1}}, 2 \cdot \frac{-1}{x}\right) + \frac{1}{x - 1}\\
\end{array}double f(double x) {
double r123083 = 1.0;
double r123084 = x;
double r123085 = r123084 + r123083;
double r123086 = r123083 / r123085;
double r123087 = 2.0;
double r123088 = r123087 / r123084;
double r123089 = r123086 - r123088;
double r123090 = r123084 - r123083;
double r123091 = r123083 / r123090;
double r123092 = r123089 + r123091;
return r123092;
}
double f(double x) {
double r123093 = x;
double r123094 = -101.77579100982673;
bool r123095 = r123093 <= r123094;
double r123096 = 98.00054950125781;
bool r123097 = r123093 <= r123096;
double r123098 = !r123097;
bool r123099 = r123095 || r123098;
double r123100 = 2.0;
double r123101 = 7.0;
double r123102 = pow(r123093, r123101);
double r123103 = r123100 / r123102;
double r123104 = 5.0;
double r123105 = pow(r123093, r123104);
double r123106 = r123100 / r123105;
double r123107 = r123100 / r123093;
double r123108 = r123107 / r123093;
double r123109 = r123108 / r123093;
double r123110 = r123106 + r123109;
double r123111 = r123103 + r123110;
double r123112 = 1.0;
double r123113 = r123093 + r123112;
double r123114 = r123112 / r123113;
double r123115 = cbrt(r123114);
double r123116 = r123115 * r123115;
double r123117 = -1.0;
double r123118 = r123117 / r123093;
double r123119 = r123100 * r123118;
double r123120 = fma(r123116, r123115, r123119);
double r123121 = r123093 - r123112;
double r123122 = r123112 / r123121;
double r123123 = r123120 + r123122;
double r123124 = r123099 ? r123111 : r123123;
return r123124;
}




Bits error versus x
| Original | 10.2 |
|---|---|
| Target | 0.3 |
| Herbie | 0.1 |
if x < -101.77579100982673 or 98.00054950125781 < x Initial program 20.2
Taylor expanded around inf 0.5
Simplified0.5
rmApplied unpow30.6
Applied associate-/r*0.1
rmApplied associate-/r*0.1
if -101.77579100982673 < x < 98.00054950125781Initial program 0.0
rmApplied div-inv0.0
Applied add-cube-cbrt0.0
Applied prod-diff0.0
Applied associate-+l+0.0
Simplified0.0
Final simplification0.1
herbie shell --seed 2019322 +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))))