fF = matrix[i3+1][i4]; matrix[i3 + 1][i4] = fSin * matrix[i3][i4] + fCos * fF; matrix[i3][i4] = fCos * matrix[i3][i4] - fSin * fF;
fF = matrix[i4][i3+1]; matrix[i4][i3 + 1] = fSin * matrix[i4][i3] + fCos * fF; matrix[i4][i3] = fCos * matrix[i4][i3] - fSin * fF;
	public boolean qLAlgorithm() {		int iMaxIter = 32;		for (int i0 = 0; i0 < size; i0++) {			int i1;			for (i1 = 0; i1 < iMaxIter; i1++) {				int i2;				for (i2 = i0; i2 <= size - 2; i2++) {					float fTmp =						Math.abs(diagonal[i2]) + Math.abs(diagonal[i2 + 1]);					if (Math.abs(subd[i2]) + fTmp == fTmp)						break;				}				if (i2 == i0)					break;				float fG =					(diagonal[i0 + 1] - diagonal[i0]) / (2.0f * subd[i0]);				float fR = (float) Math.sqrt(fG * fG + 1.0);				if (fG < 0.0f)					fG = diagonal[i2] - diagonal[i0] + subd[i0] / (fG - fR);				else					fG = diagonal[i2] - diagonal[i0] + subd[i0] / (fG + fR);				float fSin = 1.0f, fCos = 1.0f, fP = 0.0f;				for (int i3 = i2 - 1; i3 >= i0; i3--) {					float fF = fSin * subd[i3];					float fB = fCos * subd[i3];					if (Math.abs(fF) >= Math.abs(fG)) {						fCos = fG / fF;						fR = (float) Math.sqrt(fCos * fCos + 1.0);						subd[i3 + 1] = fF * fR;						fSin = 1.0f / fR;						fCos *= fSin;					} else {						fSin = fF / fG;						fR = (float) Math.sqrt(fSin * fSin + 1.0);						subd[i3 + 1] = fG * fR;						fCos = 1.0f / fR;						fSin *= fCos;					}					fG = diagonal[i3 + 1] - fP;					fR = (diagonal[i3] - fG) * fSin + 2.0f * fB * fCos;					fP = fSin * fR;					diagonal[i3 + 1] = fG + fP;					fG = fCos * fR - fB;					for (int i4 = 0; i4 < size; i4++) {						fF = matrix[i3+1][i4];						matrix[i3 + 1][i4] = fSin * matrix[i3][i4] + fCos * fF;						matrix[i3][i4] = fCos * matrix[i3][i4] - fSin * fF;					}				}				diagonal[i0] -= fP;				subd[i0] = fG;				subd[i2] = 0.0f;			}			if (i1 == iMaxIter)				return false;		}		return true;	}