@Override public final double[] closestPoint(double[] y) { if (n != y.length - 1) throw new RuntimeException("y is the wrong length"); Anstar.project(y, y); VectorFunctions.round(y, u); double m = VectorFunctions.sum(u); for (int i = 0; i < n + 1; i++) { z[i].value = Math.signum(m) * (y[i] - u[i]); z[i].index = i; } Arrays.sort(z); for (int i = 0; i < Math.abs(m); i++) u[z[i].index] -= Math.signum(m); return u; }