過去の日記

2010-08-31 [長年日記]

奇数か偶数か? の落とし穴 [tech]

アクセス解析を見ていて、以前書いたエントリリンクしていただいたようでそのリンク元からたどって、

Modulo operation - Wikipedia, the free encyclopedia

を眺めてると各言語での具体的な実装とか、今まで知らなかったことが色々とあって面白い。

あるいは、奇数かどうかを判定するのに、

bool is_odd(int n) {
    return n % 2 == 1;
}

と書くのは駄目だ(擬似コードです)ということとかも知らなかった。いや。見聞きしたことは多分あるのだろうが、知識として蓄えていなかった。

さてどこがどう駄目なのか?





























答え
負数を渡すと判定に失敗するという可能性に気づいていない。
-1 % 2 は -1 になるから、

bool is_odd(int n) {
    return n % 2 != 0;
}

が正しいとのこと。

引用元↓

http://en.wikipedia.org/wiki/Modulo_operation#Common_pitfalls