負の剰余

C言語系のプログラムでは、%を使って、剰余(余り)を計算できる。

例えば、

3 % 2 → 1
2 % 2 → 0
1 % 2 → 1
0 % 2 → 0

という感じ。じゃあ、マイナスになると?

-1 % 2 → 1
-2 % 2 → 0
-3 % 2 → 1

NO!!!!!
違うのだ。正しくは、

-1 % 2 → -1
-2 % 2 → 0
-3 % 2 → -1

どっちも間違いではないんだけど、C言語では、後者になる事が多いらしい。
でも、使いたいのは前者なので、マクロを書いた。

#define MOD(X,Y) ((Y) < 0) ? (((X) < 0) ? -(-(X) % -(Y)) : ((X) % -(Y)) + (Y)) : (((X) < 0) ? -(-(X) % (Y)) + (Y) : (X) % (Y)) // 剰余
どうしてこんなありふれた落とし穴に、今まで落ちずに来たのか。
まだまだ私には、未踏の地がたっぷり残っているらしい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です