\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\frac{1}{\sqrt{x + 1}}}{\mathsf{fma}\left(\sqrt{x}, \sqrt{x + 1}, x\right)}double f(double x) {
double r3406096 = 1.0;
double r3406097 = x;
double r3406098 = sqrt(r3406097);
double r3406099 = r3406096 / r3406098;
double r3406100 = r3406097 + r3406096;
double r3406101 = sqrt(r3406100);
double r3406102 = r3406096 / r3406101;
double r3406103 = r3406099 - r3406102;
return r3406103;
}
double f(double x) {
double r3406104 = 1.0;
double r3406105 = x;
double r3406106 = r3406105 + r3406104;
double r3406107 = sqrt(r3406106);
double r3406108 = r3406104 / r3406107;
double r3406109 = sqrt(r3406105);
double r3406110 = fma(r3406109, r3406107, r3406105);
double r3406111 = r3406108 / r3406110;
return r3406111;
}




Bits error versus x
| Original | 20.1 |
|---|---|
| Target | 0.7 |
| Herbie | 0.3 |
Initial program 20.1
rmApplied frac-sub20.0
Simplified20.0
rmApplied flip--19.8
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied associate-/l*0.8
Simplified0.6
rmApplied *-un-lft-identity0.6
Applied add-sqr-sqrt0.6
Applied times-frac0.6
Simplified0.6
Simplified0.3
Final simplification0.3
herbie shell --seed 2019151 +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)))))