1. ホーム
  2. python

[解決済み] Pythonの負の数に対するモジュロ演算

2022-07-30 18:04:27

質問

Pythonで負の数に関して奇妙な振る舞いを発見しました。

>>> -5 % 4
3

どなたか説明していただけませんか?

どのように解決するのですか?

CやC++とは異なり、Pythonのモジュロ演算子( % )は常に分母(除数)と同じ符号を持つ数を返します。あなたの式が 3 を生成するのは

(-5) / 4 = -1.25 --> floor(-1.25) = -2

(-5) % 4 = (-2 × 4 + 3) % 4 = 3.

これは、非負の結果がより有用であることが多いため、Cの動作よりも選ばれています。例として、曜日を計算することが挙げられます。今日が火曜日(2日目)であれば、週日は何日でしょうか。 N は何日前でしょうか?Pythonでは、次のように計算します。

return (2 - N) % 7

が、C言語では、もし N ≥ 3 の場合、無効な数である負の数が得られるので、手動で 7 を追加して修正する必要があります。

int result = (2 - N) % 7;
return result < 0 ? result + 7 : result;

(参照 http://en.wikipedia.org/wiki/Modulo_operator を参照してください)。