Я пытаюсь написать наивную функцию indexOf. В настоящее время работает и получает правильную позицию. Однако он переполняется при подсчете количества сравнений. Я попытался преобразовать их все в длинные длинные целые, но это, кажется, не имеет никакого значения. Что я могу сделать, чтобы это исправить?
int hostMatch(long long int *comparisons)
{
long int i,j,k, lastI;
i=0;
j=0;
k=0;
lastI = textLength-patternLength;
*comparisons=0;
int lastIi = lastI+1;
int position = -1;
int numberThreads = 1;
int totalCom = 0;
#pragma omp parallel for default(none) num_threads(numberThreads) \
shared(totalCom, position) \
private(i,j,k) \
firstprivate(lastIi,patternLength, textData, patternData)
for (i=0;i<lastIi;i++)
{
if (position != -1)
{
// found
}
else
{
k=i;
long long int count = 0L;
for (j=0;j<patternLength;j++)
{
count++;
if (textData[k] == patternData[j])
{
if (j == patternLength - 1)
{
// found
position = i;
}
}
else
{
break;
}
k++;
}
#pragma omp critical (totalLock)
{
totalCom += count;
}
}
}
/* END OF PARALLEL SECTION*/
printf("Total Comparisons = %i\n", totalCom);
(*comparisons) = totalCom;
return position;
}