Ich habe den folgenden Code, der die Jaccard-Ähnlichkeit zwischen einem Eingang char array
und einem vorhandenen Array von Char-Arrays korrekt berechnet. jacc_sim_rec[]
wird verwendet, um die Ähnlichkeiten aufzuzeichnen, die einen minimalen Schwellenwert erfüllen. Die for-Schleife wird verwendet, durch das mehrdimensionale Array zu durchlaufen und die Schleife sollte die Überprüfung Ähnlichkeit fortzusetzen, wenn Mindestschwelle notiert haupt nicht zufrieden if (jacc_sim < SIM_THRESHOLD);
sonst das Ergebnis beiWarum wird dieser Else-Block zweimal ausgeführt?
else
{
jacc_sim_rec[j] = jacc_sim;//keep record of similarity
++j;//record number of highly similar elements
}
mein Problem ist, die ganzen Aussagen in den else
Der Block wird jedes Mal zweimal ausgeführt, wenn der Schwellenwert erfüllt ist.
int j=0;
void calc_jac_sim(char*INCOMING, int grp)
{
unsigned long i, j11 = 0, j01 = 0, j10 = 0,m=0;
char *m11, *m01, *m10;
float jacc_sim = 0.0;
char r1[SBF_LEN] = { NULL };
char r2[SBF_LEN] = { NULL };
char r3[SBF_LEN] = { NULL };
int cnt = SBF_LEN - 1;
clear_jacc_sim_info();
for (int i = 0; i <= SBF_REC[grp]; ++i)
{
while (cnt >= 0)
{
r1[cnt] = SBF[grp][i][cnt] & INCOMING[cnt];
r2[cnt] = ~SBF[grp][i][cnt] & INCOMING[cnt];
r3[cnt] = SBF[grp][i][cnt] & ~INCOMING[cnt];
cnt--;
}
m11 = (char*)r1;
m01 = (char*)r2;
m10 = (char*)r3;
for (m = SBF_LEN * sizeof(char); m--;
j11 += NumberOfSetBits(*m11++),
j01 += NumberOfSetBits(*m01++),
j10 += NumberOfSetBits(*m10++));
jacc_sim = j11/(float)(j11 + j01 + j10);
if (jacc_sim < SIM_THRESHOLD);
//continue;//do nothing
else
{
jacc_sim_rec[j] = jacc_sim;//keep record of similarity
++j;//record number of highly similar elements
}
}
}
Was lässt Sie glauben, dass es zweimal in derselben Iteration passiert, nicht nur in zwei verschiedenen Iterationen? – Barmar
Statt 'if (jacc_sim = SIM_THRESHOLD) {...} ' –
Barmar
Ich habe es debuggt @Barmar – George