-2

私はこの一連の条件から始めました:

if (old.tg.all && old.hg.all) {
    // reject
} 

if (new.tg.all && new.hg.all) {
    // reject
}

if (old.hg.all && new.tg.all) {
    // reject
}

if (old.tg.all && new.hg.all) {
    // reject
}

if (old.tg == new.tg) {
    if  ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
        // reject
    }
}

if (old.hg == new.hg) {
    if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
        // reject
    }
}

私はそれを次のように減らすことができました:

if (old.tg.all || new.tg.all) && (old.hg.all || new.hg.all) {
    // reject
}

if (old.tg == new.tg) {
    if  ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
        // reject
    }
}

if (old.hg == new.hg) {
    if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
        // reject
    }
}

論理演算の数やブール条件の繰り返しをさらに減らすことはできますか?

4

1 に答える 1

1

論理式の単純化に関する最初の質問について

まず第一に、「式の単純化」は明確に定義された操作ではありません。

第 2 に、論理式を簡略化する(多かれ少なかれ) 標準的な理解は、選言標準形(または、その兄弟である連言標準形) です。どちらも、元の式と簡略化した式の両方よりも単純になる場合があります。

少なくとも、それらは表現の深さを最小限に抑えます。

Cコードに関する完全に書き直された質問について

主な問題は単純さではなく、結果として保守性が向上する意図の明確さです。書くコードの文字数や行数ではなく、コードのロジックを理解して変更するのがいかに難しいかを気にする必要があります。コードが明確である限り、多少の冗長性や余分な (安価な) チェックは問題ありません。

于 2013-03-18T17:54:08.153 に答える