\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\begin{array}{l}
\mathbf{if}\;x \le 7750.30240499724:\\
\;\;\;\;{x}^{\frac{-1}{2}} - {\left(1 + x\right)}^{\frac{-1}{2}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\frac{5}{16}}{x \cdot x}, \frac{e^{\log x \cdot \frac{-1}{2}}}{x}, \mathsf{fma}\left(\frac{1}{2}, \frac{e^{\log x \cdot \frac{-1}{2}}}{x}, \frac{-3}{8} \cdot \frac{e^{\log x \cdot \frac{-1}{2}}}{x \cdot x}\right)\right)\\
\end{array}double f(double x) {
double r3121700 = 1.0;
double r3121701 = x;
double r3121702 = sqrt(r3121701);
double r3121703 = r3121700 / r3121702;
double r3121704 = r3121701 + r3121700;
double r3121705 = sqrt(r3121704);
double r3121706 = r3121700 / r3121705;
double r3121707 = r3121703 - r3121706;
return r3121707;
}
double f(double x) {
double r3121708 = x;
double r3121709 = 7750.30240499724;
bool r3121710 = r3121708 <= r3121709;
double r3121711 = -0.5;
double r3121712 = pow(r3121708, r3121711);
double r3121713 = 1.0;
double r3121714 = r3121713 + r3121708;
double r3121715 = pow(r3121714, r3121711);
double r3121716 = r3121712 - r3121715;
double r3121717 = 0.3125;
double r3121718 = r3121708 * r3121708;
double r3121719 = r3121717 / r3121718;
double r3121720 = log(r3121708);
double r3121721 = r3121720 * r3121711;
double r3121722 = exp(r3121721);
double r3121723 = r3121722 / r3121708;
double r3121724 = 0.5;
double r3121725 = -0.375;
double r3121726 = r3121722 / r3121718;
double r3121727 = r3121725 * r3121726;
double r3121728 = fma(r3121724, r3121723, r3121727);
double r3121729 = fma(r3121719, r3121723, r3121728);
double r3121730 = r3121710 ? r3121716 : r3121729;
return r3121730;
}




Bits error versus x
| Original | 19.9 |
|---|---|
| Target | 0.7 |
| Herbie | 1.4 |
if x < 7750.30240499724Initial program 0.3
rmApplied pow1/20.3
Applied pow-flip0.1
Simplified0.1
rmApplied pow1/20.1
Applied pow-flip0.1
Simplified0.1
if 7750.30240499724 < x Initial program 40.1
rmApplied pow1/240.1
Applied pow-flip44.9
Simplified44.9
rmApplied pow1/244.9
Applied pow-flip40.1
Simplified40.1
Taylor expanded around -inf 62.7
Simplified2.9
Final simplification1.4
herbie shell --seed 2019154 +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)))))