double f(double x) {
double r19668045 = 1.0;
double r19668046 = x;
double r19668047 = sqrt(r19668046);
double r19668048 = r19668045 / r19668047;
double r19668049 = r19668046 + r19668045;
double r19668050 = sqrt(r19668049);
double r19668051 = r19668045 / r19668050;
double r19668052 = r19668048 - r19668051;
return r19668052;
}
double f(double x) {
double r19668053 = 1.0;
double r19668054 = x;
double r19668055 = sqrt(r19668054);
double r19668056 = r19668053 / r19668055;
double r19668057 = r19668054 + r19668053;
double r19668058 = sqrt(r19668057);
double r19668059 = fma(r19668058, r19668055, r19668057);
double r19668060 = r19668053 / r19668059;
double r19668061 = r19668056 * r19668060;
return r19668061;
}
\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{1}{\sqrt{x}} \cdot \frac{1}{(\left(\sqrt{x + 1}\right) \cdot \left(\sqrt{x}\right) + \left(x + 1\right))_*}



Bits error versus x
| Original | 19.8 |
|---|---|
| Target | 0.7 |
| Herbie | 0.3 |
Initial program 19.8
rmApplied frac-sub19.8
Simplified19.8
rmApplied flip--19.6
Applied associate-/l/19.6
Simplified0.8
rmApplied associate-/r*0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied distribute-lft-out0.4
Applied add-cube-cbrt0.4
Applied times-frac0.4
Applied times-frac0.4
Simplified0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019102 +o rules:numerics
(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)))))