36

整数除算 -1 / 5 は何を返す必要がありますか? 私はこの行動に完全に混乱しています。数学的には 0 のはずだと思うのですが、python と ruby​​ は -1 を返しています。

ここで異なる言語が異なる動作をするのはなぜですか? 誰か説明してください。ありがとう。

| Language  | Code           | Result |
|-----------+----------------+--------|
| ruby      | -1 / 5         |     -1 |
| python    | -1 / 5         |     -1 |
| c         | -1 / 5         |      0 |
| clojure   | (int (/ -1 5)) |      0 |
| emacslisp | (/ -1 5)       |      0 |
| bash      | expr -1 / 5    |      0 |
4

2 に答える 2

5

整数除算は実装固有です。ウィキペディアのモジュロ操作から:

多くの実装では、商が切り捨てq = trunc( a / n )によって定義される切り捨て除算を使用します。つまり、正確な有理商から 0 の方向にある最初の整数であり、r = an qによる剰余です。 . 非公式に言えば、商は「ゼロに向かって丸められる」ため、剰余は被除数と同じ符号になります。

Knuthは、商がフロア関数q =floor( a / n )によって定義され、剰余r

r = a - nq = a - n \left\lfloor {a \over n} \right\rfloor.

ここで、商は常に (既に負の場合でも) 切り捨てられ、剰余は除数と同じ符号になります。

于 2013-10-22T13:27:08.277 に答える