ルビの負の値の除算を試行します。 -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を返します。
ルビの負の値の除算を試行します。 -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を返します。
これは設計方法です。負の除算とモジュロ演算の場合、Rubyは負の無限大に向かって数値を丸めます。これはRubyに固有のことではなく、PythonとPerlも同様に動作します。
ただし、このアプローチは良好な数学的理由を提供します。
a/b = q
残りはr
な
そのb * q + r = a and 0 <= r < b
私が読んだものから、これは算術が日本で教えられている方法です。
は編集:
sawaが、これは負の数を、日本では教えていないか、正算術であることを指摘しました。しかし、彼が言ったように、これは負の数に拡張することもできます。
出典:
あなたの引用(およびオリジナル)は誤解を招きます。その式は日本の小学校でどのように教えられているのですか?それは日本だけではありません。 2.日本の小学校は負の数を教えていません。その数式を負の数に拡張することによって、その動作が得られます。そのように教えられたからではありません。 – sawa
@sawaあなたのコメントを考慮に入れて私の答えを更新しました。 –
Rubyフォーラムリンクが死んでいます:( –
CおよびCでの '-123%10 '++の結果は私の知る限り、ある、プラットフォームに依存ので、あなたの標準としてCの挙動を使用について注意してください。 –