\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\begin{array}{l}
\mathbf{if}\;x \le 83896.23902101439307443797588348388671875:\\
\;\;\;\;\mathsf{fma}\left(-\frac{1}{\sqrt[3]{\sqrt{1 + x}}}, \frac{1}{\sqrt[3]{\sqrt{1 + x}} \cdot \sqrt[3]{\sqrt{1 + x}}}, \frac{1}{\sqrt[3]{\sqrt{1 + x}} \cdot \sqrt[3]{\sqrt{1 + x}}} \cdot \frac{1}{\sqrt[3]{\sqrt{1 + x}}}\right) + \mathsf{fma}\left(1, \frac{1}{\sqrt{x}}, \frac{1}{\sqrt[3]{\sqrt{1 + x}}} \cdot \frac{-1}{\sqrt[3]{\sqrt{1 + x}} \cdot \sqrt[3]{\sqrt{1 + x}}}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{1}{x}, 0.25, \left(\left(1 + \frac{0.25}{x}\right) - 1\right) - \mathsf{fma}\left(0.15625, \frac{1}{x \cdot x}, \frac{0.09375}{x \cdot x}\right)\right)}{\sqrt{\sqrt{x}} \cdot \sqrt{\sqrt{1 + x}}} + \left(\left(-\frac{\sqrt{1}}{\sqrt{\sqrt{1 + x}}} \cdot \frac{\sqrt{1}}{\sqrt{\sqrt{1 + x}}}\right) + \frac{\sqrt{1}}{\sqrt{\sqrt{1 + x}}} \cdot \frac{\sqrt{1}}{\sqrt{\sqrt{1 + x}}}\right)\\
\end{array}double f(double x) {
double r5657055 = 1.0;
double r5657056 = x;
double r5657057 = sqrt(r5657056);
double r5657058 = r5657055 / r5657057;
double r5657059 = r5657056 + r5657055;
double r5657060 = sqrt(r5657059);
double r5657061 = r5657055 / r5657060;
double r5657062 = r5657058 - r5657061;
return r5657062;
}
double f(double x) {
double r5657063 = x;
double r5657064 = 83896.2390210144;
bool r5657065 = r5657063 <= r5657064;
double r5657066 = 1.0;
double r5657067 = r5657066 + r5657063;
double r5657068 = sqrt(r5657067);
double r5657069 = cbrt(r5657068);
double r5657070 = r5657066 / r5657069;
double r5657071 = -r5657070;
double r5657072 = 1.0;
double r5657073 = r5657069 * r5657069;
double r5657074 = r5657072 / r5657073;
double r5657075 = r5657074 * r5657070;
double r5657076 = fma(r5657071, r5657074, r5657075);
double r5657077 = sqrt(r5657063);
double r5657078 = r5657072 / r5657077;
double r5657079 = -1.0;
double r5657080 = r5657079 / r5657073;
double r5657081 = r5657070 * r5657080;
double r5657082 = fma(r5657066, r5657078, r5657081);
double r5657083 = r5657076 + r5657082;
double r5657084 = r5657066 / r5657063;
double r5657085 = 0.25;
double r5657086 = r5657085 / r5657063;
double r5657087 = r5657066 + r5657086;
double r5657088 = r5657087 - r5657066;
double r5657089 = 0.15625;
double r5657090 = r5657063 * r5657063;
double r5657091 = r5657066 / r5657090;
double r5657092 = 0.09375;
double r5657093 = r5657092 / r5657090;
double r5657094 = fma(r5657089, r5657091, r5657093);
double r5657095 = r5657088 - r5657094;
double r5657096 = fma(r5657084, r5657085, r5657095);
double r5657097 = sqrt(r5657077);
double r5657098 = sqrt(r5657068);
double r5657099 = r5657097 * r5657098;
double r5657100 = r5657096 / r5657099;
double r5657101 = sqrt(r5657066);
double r5657102 = r5657101 / r5657098;
double r5657103 = r5657102 * r5657102;
double r5657104 = -r5657103;
double r5657105 = r5657104 + r5657103;
double r5657106 = r5657100 + r5657105;
double r5657107 = r5657065 ? r5657083 : r5657106;
return r5657107;
}




Bits error versus x
| Original | 19.9 |
|---|---|
| Target | 0.6 |
| Herbie | 17.3 |
if x < 83896.2390210144Initial program 0.4
rmApplied add-cube-cbrt0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied div-inv0.4
Applied prod-diff0.4
if 83896.2390210144 < x Initial program 39.8
rmApplied add-sqr-sqrt39.8
Applied sqrt-prod48.5
Applied add-sqr-sqrt48.5
Applied times-frac52.9
Applied add-sqr-sqrt52.9
Applied sqrt-prod50.9
Applied *-un-lft-identity50.9
Applied times-frac39.9
Applied prod-diff39.9
Simplified60.1
Simplified45.0
rmApplied associate-*r/39.9
Applied frac-sub39.9
Taylor expanded around inf 39.9
Simplified34.5
Final simplification17.3
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x)
:name "2isqrt (example 3.6)"
:herbie-target
(/ 1.0 (+ (* (+ x 1.0) (sqrt x)) (* x (sqrt (+ x 1.0)))))
(- (/ 1.0 (sqrt x)) (/ 1.0 (sqrt (+ x 1.0)))))