8

ブール値とそれを変更する可能性のあるコードがあり、それを に設定したいtrue場合、それが かどうかを確認する必要がありfalseますか?

例えば:

bool b = false;
// Some code
// Here "b" can be true or false
if (cond) {
    b = true;
}

bool b = false;
// Some code
// Here `b` can be `true` or `false`
if (cond && !b){
    b = true;
}

どちらが速いですか?

:

エラトステネスのふるいの次の実装のためにお願いします: http://bloc.gerardfarras.com/wp-content/uploads/2011/12/erastotenes.txt

if (( i % divisor == 0 ) && ( numsprimers[i] == 0 )) {
    numsprimers[i] = 1;
}

(それが素数numsprimers[i]==1ではないことを意味する場合。そして、それが0の場合、素数であるかどうかはわかりません)i

4

2 に答える 2

3

それは非常に気まぐれですが、一般的に言えば、値を変更する方が良いです。

とにかく、値のチェックと設定のオーバーヘッドはほぼ同じですが、場合によっては両方を実行する必要があるのはなぜですか?

ここで、カスタムタイプ(100000語のリストなど)を上書きする必要があるのか​​、それとも最初に上書きする必要があるかどうかを確認する必要があるのか​​(たとえば、ブール値またはタイムスタンプをチェックするだけで)疑問に思っている場合は、ブール値またはタイムスタンプをチェックするコストは、メモリに非常に多くの単語を書き込むよりもはるかに少ないため、最初にチェックする必要があります。

もちろん、これはすべて、編集しているメモリがキャッシュにあるかどうか、「チェック」のコスト、値を上書きする必要がある頻度と上書きする必要がない頻度など、さまざまな要因に依存します。そしてもちろん、メモリのサイズ。

于 2012-10-14T22:52:58.210 に答える
0

どうですか:

if ( b = !!cond ) {

}

条件を確認し、値を適用するb必要がある場合は、に値を適用しbます。あなたがb真実であり続けたいなら、私はあなたの他の例の1つを使うと言います。違いはありません。

于 2012-10-14T22:53:12.750 に答える