\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{1 \cdot \frac{1}{\sqrt{x + 1} + \sqrt{x}}}{\left(\sqrt{x} \cdot \sqrt{\sqrt{x + 1}}\right) \cdot \sqrt{\sqrt{x + 1}}}double f(double x) {
double r194003 = 1.0;
double r194004 = x;
double r194005 = sqrt(r194004);
double r194006 = r194003 / r194005;
double r194007 = r194004 + r194003;
double r194008 = sqrt(r194007);
double r194009 = r194003 / r194008;
double r194010 = r194006 - r194009;
return r194010;
}
double f(double x) {
double r194011 = 1.0;
double r194012 = x;
double r194013 = r194012 + r194011;
double r194014 = sqrt(r194013);
double r194015 = sqrt(r194012);
double r194016 = r194014 + r194015;
double r194017 = r194011 / r194016;
double r194018 = r194011 * r194017;
double r194019 = sqrt(r194014);
double r194020 = r194015 * r194019;
double r194021 = r194020 * r194019;
double r194022 = r194018 / r194021;
return r194022;
}




Bits error versus x
Results
| Original | 19.8 |
|---|---|
| Target | 0.6 |
| Herbie | 0.4 |
Initial program 19.8
rmApplied frac-sub19.8
Simplified19.8
rmApplied flip--19.6
Simplified19.1
Taylor expanded around 0 0.4
rmApplied add-sqr-sqrt0.4
Applied sqrt-prod0.4
Applied associate-*r*0.4
Final simplification0.4
herbie shell --seed 2019353
(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)))))