public double[] decodifica() throws IllegalArgumentException {
        double[] limInf = getFitness().getLimInf();
        double[] limSup = getFitness().getLimSup();
        if((limInf.length != 1 && limInf.length != getFitness().getNumVariaveis()) ||
                (limSup.length != 1 && limSup.length != getFitness().getNumVariaveis())) {
            throw new IllegalArgumentException("Número imcompatível de elementos");
        }
        
        double [] real = converteParaReal();
        double[] valores = new double[getFitness().getNumVariaveis()];
        double inf, sup;
        
        int tamI = limInf.length;
        int tamS = limSup.length;
        for(int ind = 0; ind < getFitness().getNumVariaveis(); ind++) {
            inf = limInf[ind%tamI];
            sup = limSup[ind%tamS];
            valores[ind] =  inf + (sup-inf)/(Math.pow(BASE, getNumGenes())-1)*real[ind];
        }
        
        return valores;
    }