\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{1 \cdot \left(\left(\sqrt{x} \cdot \sqrt{x} + \sqrt{1} \cdot \sqrt{1}\right) - \sqrt{x} \cdot \sqrt{x}\right)}{\mathsf{fma}\left(\sqrt{x}, \mathsf{hypot}\left(\sqrt{x}, \sqrt{1}\right), x\right) \cdot \mathsf{hypot}\left(\sqrt{x}, \sqrt{1}\right)}double f(double x) {
double r256156 = 1.0;
double r256157 = x;
double r256158 = sqrt(r256157);
double r256159 = r256156 / r256158;
double r256160 = r256157 + r256156;
double r256161 = sqrt(r256160);
double r256162 = r256156 / r256161;
double r256163 = r256159 - r256162;
return r256163;
}
double f(double x) {
double r256164 = 1.0;
double r256165 = x;
double r256166 = sqrt(r256165);
double r256167 = r256166 * r256166;
double r256168 = sqrt(r256164);
double r256169 = r256168 * r256168;
double r256170 = r256167 + r256169;
double r256171 = r256170 - r256167;
double r256172 = r256164 * r256171;
double r256173 = hypot(r256166, r256168);
double r256174 = fma(r256166, r256173, r256165);
double r256175 = r256174 * r256173;
double r256176 = r256172 / r256175;
return r256176;
}




Bits error versus x
| Original | 19.0 |
|---|---|
| Target | 0.6 |
| Herbie | 18.4 |
Initial program 19.0
rmApplied add-sqr-sqrt19.0
Applied add-sqr-sqrt19.0
Applied hypot-def19.0
rmApplied frac-sub19.0
Simplified19.0
rmApplied flip--18.8
Applied associate-*r/18.8
Applied associate-/l/18.8
Simplified18.8
rmApplied hypot-udef18.8
Applied hypot-udef18.8
Applied rem-square-sqrt18.4
Final simplification18.4
herbie shell --seed 2020035 +o rules:numerics
(FPCore (x)
:name "2isqrt (example 3.6)"
:precision binary64
:herbie-target
(/ 1 (+ (* (+ x 1) (sqrt x)) (* x (sqrt (+ x 1)))))
(- (/ 1 (sqrt x)) (/ 1 (sqrt (+ x 1)))))