EdwardRaff / JSAT

Java Statistical Analysis Tool, a Java library for Machine Learning
GNU General Public License v3.0
788 stars 204 forks source link

Fix nested conditions #86

Open Egor18 opened 4 years ago

Egor18 commented 4 years ago

Hi! This code fragment works not the way it is formatted.

if(label[i] == -1)
    if(I0[i] && (i_low == -1 || fcache[i] > fcache[i_low]) )
    {
        i_low = i;
        b_low = fcache[i];
    }
else
    if(I0[i] && (i_low == -1 || fcache[i] > fcache[i_up]) )
    {
        i_up = i;
        b_up = fcache[i];
    }

is actually this (else sticks to the previous if):

if(label[i] == -1)
    if(I0[i] && (i_low == -1 || fcache[i] > fcache[i_low]) )
    {
        i_low = i;
        b_low = fcache[i];
    }
    else if(I0[i] && (i_low == -1 || fcache[i] > fcache[i_up]) )
    {
        i_up = i;
        b_up = fcache[i];
    }

I think this is a bug. (I found this with the data-flow analyzer I'm working on. It warns that i_low == -1 is always false in the second condition.)