\left(\frac{1}{x + 1} - \frac{2}{x}\right) + \frac{1}{x - 1}\begin{array}{l}
\mathbf{if}\;x \le -86.60693860825423939786560367792844772339 \lor \neg \left(x \le 109.7413808046783572081039892509579658508\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{{x}^{7}}, \mathsf{fma}\left(2, \frac{1}{{x}^{5}}, 2 \cdot {x}^{\left(-3\right)}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt{1}}{\sqrt[3]{{x}^{3} + {1}^{3}} \cdot \sqrt[3]{{x}^{3} + {1}^{3}}} \cdot \frac{\sqrt{1}}{\sqrt[3]{{x}^{3} + {1}^{3}}}, x \cdot x + \left(1 \cdot 1 - x \cdot 1\right), -\frac{1}{x} \cdot 2\right) + \mathsf{fma}\left(\frac{2}{x}, \left(-1\right) + 1, \frac{1}{x - 1}\right)\\
\end{array}double f(double x) {
double r126138 = 1.0;
double r126139 = x;
double r126140 = r126139 + r126138;
double r126141 = r126138 / r126140;
double r126142 = 2.0;
double r126143 = r126142 / r126139;
double r126144 = r126141 - r126143;
double r126145 = r126139 - r126138;
double r126146 = r126138 / r126145;
double r126147 = r126144 + r126146;
return r126147;
}
double f(double x) {
double r126148 = x;
double r126149 = -86.60693860825424;
bool r126150 = r126148 <= r126149;
double r126151 = 109.74138080467836;
bool r126152 = r126148 <= r126151;
double r126153 = !r126152;
bool r126154 = r126150 || r126153;
double r126155 = 2.0;
double r126156 = 1.0;
double r126157 = 7.0;
double r126158 = pow(r126148, r126157);
double r126159 = r126156 / r126158;
double r126160 = 5.0;
double r126161 = pow(r126148, r126160);
double r126162 = r126156 / r126161;
double r126163 = 3.0;
double r126164 = -r126163;
double r126165 = pow(r126148, r126164);
double r126166 = r126155 * r126165;
double r126167 = fma(r126155, r126162, r126166);
double r126168 = fma(r126155, r126159, r126167);
double r126169 = 1.0;
double r126170 = sqrt(r126169);
double r126171 = pow(r126148, r126163);
double r126172 = pow(r126169, r126163);
double r126173 = r126171 + r126172;
double r126174 = cbrt(r126173);
double r126175 = r126174 * r126174;
double r126176 = r126170 / r126175;
double r126177 = r126170 / r126174;
double r126178 = r126176 * r126177;
double r126179 = r126148 * r126148;
double r126180 = r126169 * r126169;
double r126181 = r126148 * r126169;
double r126182 = r126180 - r126181;
double r126183 = r126179 + r126182;
double r126184 = r126156 / r126148;
double r126185 = r126184 * r126155;
double r126186 = -r126185;
double r126187 = fma(r126178, r126183, r126186);
double r126188 = r126155 / r126148;
double r126189 = -r126156;
double r126190 = r126189 + r126156;
double r126191 = r126148 - r126169;
double r126192 = r126169 / r126191;
double r126193 = fma(r126188, r126190, r126192);
double r126194 = r126187 + r126193;
double r126195 = r126154 ? r126168 : r126194;
return r126195;
}




Bits error versus x
| Original | 9.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.0 |
if x < -86.60693860825424 or 109.74138080467836 < x Initial program 19.2
rmApplied div-inv19.2
Applied flip3-+61.8
Applied associate-/r/61.9
Applied prod-diff61.9
Applied associate-+l+61.9
Simplified61.9
Taylor expanded around inf 0.5
Simplified0.5
rmApplied pow-flip0.0
if -86.60693860825424 < x < 109.74138080467836Initial program 0.0
rmApplied div-inv0.0
Applied flip3-+0.0
Applied associate-/r/0.0
Applied prod-diff0.0
Applied associate-+l+0.0
Simplified0.0
rmApplied add-cube-cbrt0.1
Applied add-sqr-sqrt0.1
Applied times-frac0.1
Final simplification0.0
herbie shell --seed 2020001 +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))))