First, let's simplify the problem slightly by removing the six zeroes at the origin, which we know to be real anyway:
p = -2378170368 + 28283240448 x^2 - 158084628480 x^4 + 505483296768 x^6 -
1026732589056 x^8 + 1415900528640 x^10 - 1386996203520 x^12 +
991718940672 x^14 - 524928024576 x^16 + 206610186240 x^18 -
60216016896 x^20 + 12809871360 x^22 - 1932263424 x^24 +
195747840 x^26 - 11943936 x^28 + 331776 x^30;
Here is a method that combines features from polynomial and linear algebra. The method, based on the work of Miroslav Fiedler and Gerhard Schmeisser, constructs (or attempts to construct) a tridiagonal companion matrix from a polynomial (i.e., a tridiagonal matrix whose characteristic polynomial is the given polynomial), using a modified Euclidean algorithm. Even if the eigenvalues of this matrix are not needed, the matrix still has diagnostic value for checking if a given polynomial has all its roots real. Here's how to build the diagonal and one of the off-diagonals:
n = Exponent[p, x];
p0 = p/Coefficient[p, x, n]; p1 = D[p0/n, x];
{d, e} = MapAt[Most, Transpose[
Table[{q, r} = PolynomialQuotientRemainder[p0, p1, x];
s = If[TrueQ[r == 0], 0,
Coefficient[-r, x, Exponent[r, x]]];
If[k < n, p0 = p1;
p1 = If[TrueQ[r == 0],
(#/Coefficient[#, x, Exponent[#, x]]) &[D[p1, x]],
-r/s]];
{-Coefficient[q, x, 0], s}, {k, n}]], 2]
(I've omitted the output, as the result has fractions with a lot of digits.)
Checking if all the roots are real is as easy as
And @@ NonNegative[e]
False
(This previous answer also used this method to check for real roots.)
Total@Flatten@Last@RootIntervals[poly]
will give you the number of real roots. $\endgroup$Roots
orNRoots
? $\endgroup$