\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1 \cdot 1}{x + 1}}{1} \cdot \frac{\frac{1}{x}}{\frac{1}{\sqrt{x}} + \frac{1}{\sqrt{x + 1}}}double f(double x) {
double r144318 = 1.0;
double r144319 = x;
double r144320 = sqrt(r144319);
double r144321 = r144318 / r144320;
double r144322 = r144319 + r144318;
double r144323 = sqrt(r144322);
double r144324 = r144318 / r144323;
double r144325 = r144321 - r144324;
return r144325;
}
double f(double x) {
double r144326 = 1.0;
double r144327 = r144326 * r144326;
double r144328 = x;
double r144329 = r144328 + r144326;
double r144330 = r144327 / r144329;
double r144331 = r144330 / r144326;
double r144332 = r144326 / r144328;
double r144333 = 1.0;
double r144334 = sqrt(r144328);
double r144335 = r144333 / r144334;
double r144336 = sqrt(r144329);
double r144337 = r144333 / r144336;
double r144338 = r144335 + r144337;
double r144339 = r144332 / r144338;
double r144340 = r144331 * r144339;
return r144340;
}




Bits error versus x
Results
| Original | 19.4 |
|---|---|
| Target | 0.7 |
| Herbie | 0.4 |
Initial program 19.4
rmApplied flip--19.4
rmApplied frac-times24.6
Applied frac-times19.5
Applied frac-sub19.2
Simplified18.9
Simplified18.8
Taylor expanded around 0 5.8
rmApplied div-inv5.8
Applied div-inv5.8
Applied distribute-lft-out5.8
Applied times-frac5.4
Applied times-frac0.4
Final simplification0.4
herbie shell --seed 2020020 +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)))))