(-7)%10 = ?
答えは 2 つあります:-7
または 3
これは、プログラミング言語におけるモジュロ演算の定義について話す必要があります。
r = a - (a / b) * b
ここで、除算 a / b
には 2 つの異なる切り捨て方があります。1 つはゼロ方向への切り捨て、もう 1 つは負の無限方向への切り捨てです。これにより、モジュロ演算には 2 つの結果が生じます。
例えば:
-7/10 をゼロ方向に切り捨てると、結果は 0 になります。負の無限方向に切り捨てると、結果は -1 になります。したがって、ゼロ方向の切り捨てを採用すると、-7%10 の結果は -7 になりますが、負の無限方向に切り捨てると、結果は 3 になります。
ゼロ方向に切り捨てるか、負の無限方向に切り捨てるかは、異なる言語の実装方法によって異なります。通常、ゼロ方向に切り捨てる方法がデフォルトですが、Python は負の無限方向に切り捨てる方法を採用しています。一部の言語では、rem
と mod
の 2 つの関数を提供しています。
時々、負の無限方向に切り捨てる方法が必要な場合はどうすればよいでしょうか。floor
関数を使用して計算することができます。この関数は切り捨てを行います。したがって、モジュロ演算は次のようになります:
r = a - floor(a / b) * b