Tworze zmienną Q i nadaje jej wartość 0.0.
Później nic z nią nie robię a później ma ona jakąś losową wartość, całkiem inną niż 0.0 które jej przypisałem.
Co robię źle?

Nie sądzę, że to istotne, ale na wszelki wypadek:
Kod pobiera piksel z danego obrazka(BufferedImage), wyciąga z niego kanały rgb i normalizuje je, po czym ma nastąpić ich zamiana na hsl.

 double Q = 0.0, P=0d;
                        System.out.println(Q);**// tu jeszcze jest 0.0**
        int[] hsl=new int[3];
        int rgb1;
        for(int i=0;i<input.getWidth();i++){
            for(int j=0;j<input.getHeight();j++){
                rgb=normalize(getRGBfactors(input.getRGB(i, j)), 255);
                min=Math.min(Math.min(rgb[0], rgb[1]), rgb[2]);
                max=Math.max(Math.max(rgb[0], rgb[1]), rgb[2]);
                dm=max-min;
                L=(max+min)/2;
                if(L==0.0||max==min){
                    S=0.0;
                }else if(L>0&&L<=0.5){
                    S=dm/2L;
                }else if(L>0.5){
                    S=dm/(2-2L);
                }
                if(max==min){
                    H=0;
                }else if(max==rgb[0]&&rgb[1]>=rgb[2]){
                    H=(int) (60 * (rgb[1] - rgb[2]) / dm);
                }else if(max==rgb[0]&&rgb[1]<rgb[2]){
                    H=(int) (60 * (rgb[1] - rgb[2]) / dm)+360;
                }else if(max==rgb[1]){
                    H=(int) (60 * (rgb[2] - rgb[0]) / dm)+120;
                }else if(max==rgb[2]){
                    H=(int) (60 * (rgb[0] - rgb[1]) / dm)+240;
                }
                if(which==0){
                    H+=factor;
                }else if(which ==1){
                    S+=factor;
                }else if(which ==2){
                    L+=factor;
                }
                if(S==0.0){
                    rgb[0]=L;
                    rgb[1]=L;
                    rgb[2]=L;
                }else{
                    if(L<0.5){
                        System.out.println(Q);  **//W tym miejscu Q zawiera różne dziwne(inne niż 0.0) wartości, łączne z NaN**
                        Q = L * (1.0 + S);//Q==NaN ??