2013-05-13 4 views
5

ルビの負の値の除算を試行します。 -123/10、-12の代わりに-13を返すのはなぜですか?ルビの負の値での整数除算

ruby -v 
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1] 

irb(main):001:0> -123/10 
=> -13 
irb(main):002:0> -123%10 
=> 7 

-123/10は、期待通りに-12と-123%10がC/C++で-3を返します。

+1

CおよびCでの '-123%10 '++の結果は私の知る限り、ある、プラットフォームに依存ので、あなたの標準としてCの挙動を使用について注意してください。 –

答えて

7

これは設計方法です。負の除算とモジュロ演算の場合、Rubyは負の無限大に向かって数値を丸めます。これはRubyに固有のことではなく、PythonとPerlも同様に動作します。

ただし、このアプローチは良好な数学的理由を提供します。

a/b = q残りはr

その
b * q + r = a and 0 <= r < b 

私が読んだものから、これは算術が日本で教えられている方法です。

は編集:

sawaが、これは負の数を、日本では教えていないか、正算術であることを指摘しました。しかし、彼が言ったように、これは負の数に拡張することもできます。

出典:

Ruby Forums

+0

あなたの引用(およびオリジナル)は誤解を招きます。その式は日本の小学校でどのように教えられているのですか?それは日本だけではありません。 2.日本の小学校は負の数を教えていません。その数式を負の数に拡張することによって、その動作が得られます。そのように教えられたからではありません。 – sawa

+1

@sawaあなたのコメントを考慮に入れて私の答えを更新しました。 –

+0

Rubyフォーラムリンクが死んでいます:( –