約90%の0と10%の1を持つ1,000,000個の要素の配列があるとします。
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%の0と10%の1を持つ1,000,000個の要素の配列があるとします。
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%の確率で間違っており、速度がかなり低下します。