1

約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++;
}

しかし、私にはわかりません。どちらが速いですか?

4

1 に答える 1

3

どちらを試さずに高速になるかを判断するのは難しいですが、パイプライン化と分岐予測により、通常、分岐のない少し遅い命令でも高速になります。

あなたの場合、分岐予測は90%の確率で間違っており、速度がかなり低下します。

于 2012-10-05T03:35:23.133 に答える