今日、職場で同僚の一人と興味深い話をしました。次のようなことが起こったとき、彼は驚いた。
assert(-1 % 10 == -1) //Expecting 9
それで、彼が私にそれについて尋ねに来たとき、私は彼に言いました。 「常に正の」モデル. 私は少し調査を行い、彼が言及していたモジュラスが次のように見えることを発見しました:
q を a と n の整数商とします。r を剰余とします。それで:
a = n * q + r
ただし、私が使用していた定義は、係数のクヌース版のようです。つまり、次のとおりです。
q を n で割った a の床とする。r を剰余とします。それで:
r = a - n * q
それで、私の質問は、モジュラス演算子を0に向かって切り捨てることがFORTRAN標準(およびその後のC標準)で終わったのはなぜですか? それを「剰余」ではなく「モジュラス」と呼ぶのは、私には誤解のように思えます (数学では、答えは実際には 9 になるはずです)。これは、ハードウェアが分割を行う方法に関連していますか?
参考のため:
- モジュラスに関するウィキペディア
- 「modulus」演算子に関する MSDN エントリ
(はい、VS2003 のことを認識しています...私は現在それで立ち往生しています。Sadface) - モジュラス演算子の変更
- 正の剰余を想定しないでください...
TLDR; モジュラス演算子が 0 に向かって切り捨てられる理由はハードウェアですか?