public static void nextW_DeltaSearch() {
        if (!userRequestedW.isEmpty()) {
            w = userRequestedW.pollFirst();
            return;
        }
        if (!wasFract[0]) {
            w = leftW;
            wasFract[0] = true;
            return;
        } else if (!wasFract[wasFract.length - 1]) {
            w = rightW;
            wasFract[wasFract.length - 1] = true;
            return;
        } else {
            for (int i = maxFractPow2; i > 0; i--) {
                for (int j = 0; (1 << (i - 1)) + j * (1 << i) < wasFract.length; j++) {
                    float tmp = leftW + (rightW - leftW) * (1 + 2 * j)
                            / (float) (1 << (maxFractPow2 + 1 - i));
                    if (!wasFract[(1 << (i - 1)) + j * (1 << i)]
                            && tmp >= chosenLeftW && tmp <= chosenRightW) {
                        w = tmp;
                        wasFract[(1 << (i - 1)) + j * (1 << i)] = true;
                        return;
                    }
                }
            }
        }
        frame.stop();
        JOptionPane.showMessageDialog(frame,
                "Максимальная точность на данном отрезке достигнута");
    }