\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\frac{\mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\frac{1}{\sqrt{x + 1} + \sqrt{x}}\right)\right)\right)\right)}{\sqrt{\sqrt{x + 1}} \cdot \left(\sqrt{x} \cdot \sqrt{\sqrt{x + 1}}\right)}double f(double x) {
double r2294069 = 1.0;
double r2294070 = x;
double r2294071 = sqrt(r2294070);
double r2294072 = r2294069 / r2294071;
double r2294073 = r2294070 + r2294069;
double r2294074 = sqrt(r2294073);
double r2294075 = r2294069 / r2294074;
double r2294076 = r2294072 - r2294075;
return r2294076;
}
double f(double x) {
double r2294077 = 1.0;
double r2294078 = x;
double r2294079 = r2294078 + r2294077;
double r2294080 = sqrt(r2294079);
double r2294081 = sqrt(r2294078);
double r2294082 = r2294080 + r2294081;
double r2294083 = r2294077 / r2294082;
double r2294084 = log1p(r2294083);
double r2294085 = expm1(r2294084);
double r2294086 = sqrt(r2294080);
double r2294087 = r2294081 * r2294086;
double r2294088 = r2294086 * r2294087;
double r2294089 = r2294085 / r2294088;
return r2294089;
}




Bits error versus x
Results
| Original | 19.7 |
|---|---|
| Target | 0.6 |
| Herbie | 0.4 |
Initial program 19.7
rmApplied frac-sub19.7
Simplified19.7
rmApplied flip--19.5
Simplified19.1
rmApplied expm1-log1p-u19.1
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied sqrt-prod0.4
Applied associate-*r*0.4
Final simplification0.4
herbie shell --seed 2019128 +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)))))