swift,C,Javaとruby, python,perlでは、 負数を割り算や剰余に使った場合、結果が異なる。
python 剰余
7 % 3 -> 1 7 % -3 -> -2 -7 % 3 -> 2 -7 & -3 -> -1
swift 剰余
7 % 3 -> 1 7 % -3 -> 1 -7 % 3 -> -1 -7 % -3 -> -1
python 商
7 / 2 -> 3 7 / -2 -> -4 -7 / 2 -> -4 -7 / -2 -> 3
swift 商
7 / 2 -> 3 7 / -2 -> -3 -7 / 2 -> -3 -7 / -2 -> 3
swiftの除法をユークリッド除法と呼び、 剰余を割られる値のsignに合わせる。
pythonの除法を絶対的最小剰余と呼び、割り切れない場合はマイナス無限大方向に丸める。
rust
rustはc/swift/java系統と同じである。
7 % 3 -> 1 7 % -3 -> 1 -7 % 3 -> -1 -7 % -3 -> -1
7 / 2 -> 3 7 / -2 -> -3 -7 / 2 -> -3 -7 / -2 -> 3
なお、BigIntも同じ。
rustでpython,haskelと同じようにするには、divremクレートのDivFloor,RemFloorを使えばよい。