Допустим, у меня есть массив из 1000000 элементов с примерно 90% от 0 и 10% от 1.
Для того, чтобы считать 1 с, я могу сделать
sum=0;
for(int i=0;i<size;i++) {
sum+=x[i]
}
Но я подумал, может быть, сравнение дешевле, чем сложение, так что это будет лучше.
sum=0;
for(int i=0;i<size;i++) {
if(x[i]==1)
sum++;
}
Но я не уверен. Какой из них быстрее?
Трудно сказать, какая из них будет быстрее без попытки, но даже немного более медленная инструкция без ветвления обычно будет быстрее из-за конвейерная обработка и прогноз ветвления.
В вашем случае предиктор ветвления будет ошибочным в 90% случаев, что несколько снижает скорость.
Других решений пока нет …