protected void computeFloor(final float[] vector) {

        int n = vector.length;
        final int values = xList.length;
        final boolean[] step2Flags = new boolean[values];

        final int range = RANGES[multiplier - 1];

        for (int i = 2; i < values; i++) {
            final int lowNeighbourOffset = lowNeighbours[i];// Util.lowNeighbour(xList,
            // i);
            final int highNeighbourOffset = highNeighbours[i];// Util.highNeighbour(xList,
            // i);
            final int predicted = Util.renderPoint(xList[lowNeighbourOffset],
                    xList[highNeighbourOffset], yList[lowNeighbourOffset],
                    yList[highNeighbourOffset], xList[i]);
            final int val = yList[i];
            final int highRoom = range - predicted;
            final int lowRoom = predicted;
            final int room = highRoom < lowRoom ? highRoom * 2 : lowRoom * 2;
            if (val != 0) {
                step2Flags[lowNeighbourOffset] = true;
                step2Flags[highNeighbourOffset] = true;
                step2Flags[i] = true;
                if (val >= room) {
                    yList[i] = highRoom > lowRoom ? val - lowRoom + predicted : -val + highRoom
                            + predicted - 1;
                } else {
                    yList[i] = (val & 1) == 1 ? predicted - ((val + 1) >> 1) : predicted
                            + (val >> 1);
                }
            } else {
                step2Flags[i] = false;
                yList[i] = predicted;
            }
        }

        final int[] xList2 = new int[values];

        System.arraycopy(xList, 0, xList2, 0, values);
        sort(xList2, yList, step2Flags);

        int hx = 0, hy = 0, lx = 0, ly = yList[0] * multiplier;

        float[] vector2 = new float[vector.length];
        float[] vector3 = new float[vector.length];
        Arrays.fill(vector2, 1F);
        System.arraycopy(vector, 0, vector3, 0, vector.length);

        for (int i = 1; i < values; i++) {
            if (step2Flags[i]) {
                hy = yList[i] * multiplier;
                hx = xList2[i];
                Util.renderLine(lx, ly, hx, hy, vector);
                Util.renderLine(lx, ly, hx, hy, vector2);
                lx = hx;
                ly = hy;
            }
        }

        final float r = DB_STATIC_TABLE[hy];
        while (hx < n / 2) {
            vector[hx++] = r;
        }
    }