完全な開示は - 私はさておき、私は+=
対-=
をテストすることを決めIs x += a quicker than x = x + a?+は+ =より速いですか?
に触発されました。シンプルなテストでは、同じことが分かります。 k
は、たとえば、小さな、-=
はduuuh(より頻繁に呼ばれるになるだろうされている場合、その
long long sum = 0;
for (each number in the array)
if (x[j] < k)
sum += x[j];
else
sum -= x[j];
:それから私は次のように何かを試してみました:
std::vector<int> x;
for (int i = 0 ; i < 10000 ; i++)
x.push_back(rand()%10);
を、与えられた数に比例し+=
と-=
を呼び出します)。私は、-=
と呼ばれ、k = 5
とのより高い割合を与えるk = 2
を試しました。これは、およそ同数の-=
と+=
を生成するはずです。
パンチライン:-=
を呼び出すと、+=
を呼び出すより約2倍高速です。この場合、なぜより効率的になるのでしょうか?
「インスピレーションを受けた」より良いことがあると思います。 – Mysticial
おそらくA + BがちょうどA +(-B)であると考えて、A + Bにちょっとした利点があるかもしれません。 – nullpotent
2つの言葉:分岐予測。ヒント:k = 8を試してください –