数学:
このような方程式がある場合:
x = 3 mod 7
xは...-4、3、10、17、...、またはより一般的には次のようになります。
x = 3 + k * 7
ここで、kは任意の整数です。数学のためにモジュロ演算が定義されているかどうかはわかりませんが、因数環は確かに定義されています。
Python:
%
Pythonでは、正の値を使用すると、常に非負の値が得られますm
。
#!/usr/bin/python
# -*- coding: utf-8 -*-
m = 7
for i in xrange(-8, 10 + 1):
print(i % 7)
結果:
6 0 1 2 3 4 5 6 0 1 2 3 4 5 6 0 1 2 3
C ++:
#include <iostream>
using namespace std;
int main(){
int m = 7;
for(int i=-8; i <= 10; i++) {
cout << (i % m) << endl;
}
return 0;
}
出力します:
-1 0 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 0 1 2 3
ISO / IEC 14882:2003(E)-5.6乗法演算子:
二項/演算子は商を生成し、二項%演算子は、最初の式を2番目の式で除算した余りを生成します。/または%の第2オペランドがゼロの場合、動作は未定義です。それ以外の場合、(a / b)* b + a%bはaに等しくなります。両方のオペランドが非負の場合、余りは非負です。そうでない場合、剰余の符号は実装定義です74)。
と
74)ISO Cの改訂に向けて進行中の作業によると、整数除算に推奨されるアルゴリズムは、ISOFortran規格ISO/ IEC 1539:1991で定義されている規則に従います。この規則では、商は常にゼロに向かって丸められます。
(無料版が見つかりませんでしたISO/IEC 1539:1991
。どこから入手できるか誰か知っていますか?)
操作は次のように定義されているようです。
質問:
そのように定義するのは理にかなっていますか?
この仕様の議論は何ですか?そのような基準を作成する人々がそれについて話し合う場所はありますか?彼らがこのようにすることを決めた理由について、どこで私は何かを読むことができますか?
モジュロを使用するほとんどの場合、データ構造の要素にアクセスしたいと思います。この場合、modが負でない値を返すことを確認する必要があります。したがって、この場合、modが常に非負の値を返すのは良いことです。(別の使用法はユークリッドアルゴリズムです。このアルゴリズムを使用する前に両方の数値を正にすることができるため、モジュロの符号が重要になります。)
追加資料:
モジュロがさまざまな言語で行うことの長いリストについては、ウィキペディアを参照してください。