1 #include "quadmath-imp.h"
6 sqrtq (const __float128 x
)
11 if (isnanq (x
) || (isinfq (x
) && x
> 0))
19 /* Return NaN with invalid signal. */
20 return (x
- x
) / (x
- x
);
23 if (x
<= DBL_MAX
&& x
>= DBL_MIN
)
25 /* Use double result as starting point. */
26 y
= sqrt ((double) x
);
28 /* Two Newton iterations. */
29 y
-= 0.5q
* (y
- x
/ y
);
30 y
-= 0.5q
* (y
- x
/ y
);
35 if (x
<= LDBL_MAX
&& x
>= LDBL_MIN
)
37 /* Use long double result as starting point. */
38 y
= sqrtl ((long double) x
);
40 /* One Newton iteration. */
41 y
-= 0.5q
* (y
- x
/ y
);
46 /* If we're outside of the range of C types, we have to compute
47 the initial guess the hard way. */
53 y
= scalbnq (y
, exp
/ 2);
55 /* Two Newton iterations. */
56 y
-= 0.5q
* (y
- x
/ y
);
57 y
-= 0.5q
* (y
- x
/ y
);