private void checkSplitPerformImplicit()
        {
            // check for splits
            for (int i = x2; i > x1; i--)
            {
                if (_implicit.isZero(i, i - 1))
                {
                    x1 = i;
                    splits[numSplits++] = i - 1;
                    // reduce the scope of what it is looking at
                    return;
                }
            }
            // first try using known eigenvalues in the same order they were originally found
            if (onscript)
            {
                if (_implicit.steps > _implicit.exceptionalThreshold / 2)
                {
                    onscript = false;
                }
                else
                {
                    Complex_F32 a = origEigenvalues[indexVal];

                    // if no splits are found perform an _implicit step
                    if (a.isReal())
                    {
                        _implicit.performImplicitSingleStep(x1, x2, a.getReal());
                    }
                    else if (x2 - x1 >= 1 && x1 + 2 < N)
                    {
                        _implicit.performImplicitDoubleStep(x1, x2, a.real, a.imaginary);
                    }
                    else
                    {
                        onscript = false;
                    }
                }
            }
            else
            {
                // that didn't work so try a modified order
                if (x2 - x1 >= 1 && x1 + 2 < N)
                {
                    _implicit.implicitDoubleStep(x1, x2);
                }
                else
                {
                    _implicit.performImplicitSingleStep(x1, x2, _implicit.A.get(x2, x2));
                }
            }
        }
        private void performIteration()
        {
            bool changed = false;

            // see if it can perform a split
            for (int i = x2; i > x1; i--)
            {
                if (implicitQR.isZero(i, i - 1))
                {
                    x1 = i;
                    splits[numSplits++] = i - 1;
                    changed             = true;
                    // reduce the scope of what it is looking at
                    break;
                }
            }

            if (!changed)
            {
                implicitQR.implicitDoubleStep(x1, x2);
            }
        }