Exploits IEEE arithmetic to accelerate the computations of eigenvalues. (C interface function).
void pslaiect(float *sigma, int *n, float *d, int *count);
void pdlaiectb(float *sigma, int *n, float *d, int *count);
void pdlaiectl(float *sigma, int *n, float *d, int *count);
The p?laiect routine computes the number of negative eigenvalues of (
A- σI). This implementation of the Sturm Sequence loop exploits IEEE arithmetic and has no conditionals in the innermost loop. The signbit for real routine pslaiect is assumed to be bit 32. Double-precision routines pdlaiectb and pdlaiectl differ in the order of the double precision word storage and, consequently, in the signbit location. For pdlaiectb, the double precision word is stored in the big-endian word order and the signbit is assumed to be bit 32. For pdlaiectl, the double precision word is stored in the little-endian word order and the signbit is assumed to be bit 64.
Note that all arguments are call-by-reference so that this routine can be directly called from Fortran code.
This is a ScaLAPACK internal subroutine and arguments are not checked for unreasonable values.
DOUBLE PRECISIONfor pdlaiectb/pdlaiectl.
The shift. p?laiect finds the number of eigenvalues less than equal to sigma.
INTEGER. The order of the tridiagonal matrix T.
n ≥ 1.
DOUBLE PRECISION for pdlaiectb/pdlaiectl.
Array of size
On entry, this array contains the diagonals and the squares of the off-diagonal elements of the tridiagonal matrix T. These elements are assumed to be interleaved in memory for better cache performance. The diagonal entries of T are in the entries
d(1), d(3),..., d(2n-1), while the squares of the off-diagonal entries are
d(2), d(4), ..., d(2n-2). To avoid overflow, the matrix must be scaled so that its largest entry is no greater than
overflow(1/2) * underflow(1/4)in absolute value, and for greatest accuracy, it should not be much smaller than that.