負の数に対する除算は処理系定義になる

標準C++では、負の数に対する除算の結果が保証されません。

手元にある標準C++(X3014:2003)の仕様書にある剰余演算子の項目には以下のように書かれています。

  • 第2演算子(割る数)が0の時の動作は未定義
  • 演算結果は(a/b)*b+a%b=a
  • 両方の演算対象が負でない場合、その剰余は負でなく、それ以外は処理系定義

この処理系定義の意味は、処理系に依存した動作であり、それぞれの処理系が文書で説明を用意しておく必要があると書かれていました。理由は演算結果を満たす答えが2種類でてしまうからです。

つまり、-7/2の結果が-3・・・-1になるか、-4・・・1になるかを一概には決められないのです。

ちなみに-3にならない実装を私は見たことがないです・・・。



[JISX3014] – プログラム言語C++

[Lippman] – C++ Primer



ネタ元は、別件のコメントより頂きました。この場を借りてお礼を申し上げます。

Leave a Reply

最初のコメントを頂けますか?

更新通知を受け取る »
avatar
wpDiscuz