\frac{1}{\sqrt{x}} - \frac{1}{\sqrt{x + 1}}\begin{array}{l}
\mathbf{if}\;x \le 5626.584148737379:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{-1}{\sqrt[3]{\sqrt{1 + x}}}\right), \left(\frac{1}{\sqrt[3]{\sqrt{1 + x}} \cdot \sqrt[3]{\sqrt{1 + x}}}\right), \left(\frac{1}{\sqrt[3]{\sqrt{1 + x}} \cdot \sqrt[3]{\sqrt{1 + x}}} \cdot \frac{1}{\sqrt[3]{\sqrt{1 + x}}}\right)\right) + \mathsf{fma}\left(1, \left({x}^{\frac{-1}{2}}\right), \left(\frac{1}{\sqrt[3]{\sqrt{1 + x}} \cdot \sqrt[3]{\sqrt{1 + x}}} \cdot \frac{-1}{\sqrt[3]{\sqrt{1 + x}}}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\left(\frac{\frac{5}{16}}{x \cdot x}\right), \left(\frac{e^{\log x \cdot \frac{-1}{2}}}{x}\right), \left(\left(\frac{1}{2} - \frac{\frac{3}{8}}{x}\right) \cdot \frac{e^{\log x \cdot \frac{-1}{2}}}{x}\right)\right)\\
\end{array}double f(double x) {
double r3381624 = 1.0;
double r3381625 = x;
double r3381626 = sqrt(r3381625);
double r3381627 = r3381624 / r3381626;
double r3381628 = r3381625 + r3381624;
double r3381629 = sqrt(r3381628);
double r3381630 = r3381624 / r3381629;
double r3381631 = r3381627 - r3381630;
return r3381631;
}
double f(double x) {
double r3381632 = x;
double r3381633 = 5626.584148737379;
bool r3381634 = r3381632 <= r3381633;
double r3381635 = -1.0;
double r3381636 = 1.0;
double r3381637 = r3381636 + r3381632;
double r3381638 = sqrt(r3381637);
double r3381639 = cbrt(r3381638);
double r3381640 = r3381635 / r3381639;
double r3381641 = r3381639 * r3381639;
double r3381642 = r3381636 / r3381641;
double r3381643 = r3381636 / r3381639;
double r3381644 = r3381642 * r3381643;
double r3381645 = fma(r3381640, r3381642, r3381644);
double r3381646 = -0.5;
double r3381647 = pow(r3381632, r3381646);
double r3381648 = r3381642 * r3381640;
double r3381649 = fma(r3381636, r3381647, r3381648);
double r3381650 = r3381645 + r3381649;
double r3381651 = 0.3125;
double r3381652 = r3381632 * r3381632;
double r3381653 = r3381651 / r3381652;
double r3381654 = log(r3381632);
double r3381655 = r3381654 * r3381646;
double r3381656 = exp(r3381655);
double r3381657 = r3381656 / r3381632;
double r3381658 = 0.5;
double r3381659 = 0.375;
double r3381660 = r3381659 / r3381632;
double r3381661 = r3381658 - r3381660;
double r3381662 = r3381661 * r3381657;
double r3381663 = fma(r3381653, r3381657, r3381662);
double r3381664 = r3381634 ? r3381650 : r3381663;
return r3381664;
}




Bits error versus x
| Original | 20.1 |
|---|---|
| Target | 0.7 |
| Herbie | 1.5 |
if x < 5626.584148737379Initial program 0.4
rmApplied pow10.4
Applied sqrt-pow10.4
Applied pow-flip0.1
Simplified0.1
rmApplied add-cube-cbrt0.1
Applied add-sqr-sqrt0.1
Applied times-frac0.1
Applied *-un-lft-identity0.1
Applied prod-diff0.1
if 5626.584148737379 < x Initial program 39.7
rmApplied pow139.7
Applied sqrt-pow139.7
Applied pow-flip45.1
Simplified45.1
rmApplied pow1/245.1
Applied pow-flip39.7
Simplified39.7
Taylor expanded around -inf 62.7
Simplified2.9
Final simplification1.5
herbie shell --seed 2019129 +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)))))