\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\begin{array}{l}
\mathbf{if}\;x \le 1.189590584318109 \cdot 10^{+141}:\\
\;\;\;\;{x}^{\frac{-1}{2}} - \sqrt[3]{\frac{\frac{1}{1 + x}}{\sqrt{1 + x}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\frac{1}{\sqrt{x}} - {\left(1 + x\right)}^{\frac{-1}{2}}\right) \cdot \left(\left(\frac{1}{\sqrt{x}} - {\left(1 + x\right)}^{\frac{-1}{2}}\right) \cdot \left(\frac{1}{\sqrt{x}} - {\left(1 + x\right)}^{\frac{-1}{2}}\right)\right)}\\
\end{array}double f(double x) {
double r4227283 = 1.0;
double r4227284 = x;
double r4227285 = sqrt(r4227284);
double r4227286 = r4227283 / r4227285;
double r4227287 = r4227284 + r4227283;
double r4227288 = sqrt(r4227287);
double r4227289 = r4227283 / r4227288;
double r4227290 = r4227286 - r4227289;
return r4227290;
}
double f(double x) {
double r4227291 = x;
double r4227292 = 1.189590584318109e+141;
bool r4227293 = r4227291 <= r4227292;
double r4227294 = -0.5;
double r4227295 = pow(r4227291, r4227294);
double r4227296 = 1.0;
double r4227297 = r4227296 + r4227291;
double r4227298 = r4227296 / r4227297;
double r4227299 = sqrt(r4227297);
double r4227300 = r4227298 / r4227299;
double r4227301 = cbrt(r4227300);
double r4227302 = r4227295 - r4227301;
double r4227303 = sqrt(r4227291);
double r4227304 = r4227296 / r4227303;
double r4227305 = pow(r4227297, r4227294);
double r4227306 = r4227304 - r4227305;
double r4227307 = r4227306 * r4227306;
double r4227308 = r4227306 * r4227307;
double r4227309 = cbrt(r4227308);
double r4227310 = r4227293 ? r4227302 : r4227309;
return r4227310;
}




Bits error versus x
Results
| Original | 19.6 |
|---|---|
| Target | 0.7 |
| Herbie | 19.3 |
if x < 1.189590584318109e+141Initial program 17.6
rmApplied pow1/217.6
Applied pow-flip17.4
Simplified17.4
rmApplied add-cbrt-cube17.3
Applied add-cbrt-cube17.3
Applied cbrt-undiv17.2
Simplified17.2
if 1.189590584318109e+141 < x Initial program 24.9
rmApplied pow1/224.9
Applied pow-flip35.1
Simplified35.1
rmApplied add-cbrt-cube25.0
Final simplification19.3
herbie shell --seed 2019146
(FPCore (x)
:name "2isqrt (example 3.6)"
:herbie-target
(/ 1 (+ (* (+ x 1) (sqrt x)) (* x (sqrt (+ x 1)))))
(- (/ 1 (sqrt x)) (/ 1 (sqrt (+ x 1)))))