入力char array
と既存のchar配列の配列の間のjaccardの類似度を正しく計算する次のコードがあります。 jacc_sim_rec[]
は、最小閾値を満足する類似性を記録するために使用される。ループのための多次元配列を反復処理するために使用され、ループが最小しきい値が他のif (jacc_sim < SIM_THRESHOLD);
で満足していないかどうかをチェックする類似度を続けるこのelseブロックが2回実行されるのはなぜですか?
else
{
jacc_sim_rec[j] = jacc_sim;//keep record of similarity
++j;//record number of highly similar elements
}
で結果を記録することになっている私の問題はelse
で、全体の文ですブロックがしきい値を満たすたびに2回実行される。
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
}
}
}
2つの異なる繰り返しだけでなく、同じ繰り返しで2回起こっていると思いますか? – Barmar
'if(jacc_sim = SIM_THRESHOLD){...} 'と書くのはなぜですか? –
Barmar
私はデバッグしました@Barmar – George