2013-11-20 16 views
5

私は基本的にJavaの背景から来て、Rubyのモジュロ演算を理解するのに苦労しています。なぜRubyモジュロがjava/other langと異なるのですか?

(5 % 3)  
(-5 % 3)  
(5 % -3)  
(-5 % -3) 

のJava収率で上記動作、 2 -2 2 -2

しかし、Rubyで、同じ発現収量2 -1 -2。

どのように論理的にルビーはこれでいいですか?モジュール操作がRubyでどのように実装されていますか?同じ操作がWebサービスとして定義されている場合、両方のサービスがどのようにロジックに一致するか。

+1

ルビは負の計算で数字として0を含むようです。 –

+1

私は、Rubyは除数の符号を取る一方、Javaは配当の兆候をもって残りを取ると信じています。仕様を確認する必要があります... – iamnotmaynard

+0

ルビーが違うように見えるように見えます。私は現在、他のc言語のような言語でバックグラウンドで学習しており、オペレータ/コンストラクトの名前には多くの疑問のある違いがあります。 SCNR – akostadinov

答えて

3

Javaでは、モジュロ演算の結果に被除数と同じ符号があります。

Rubyでは、除数と同じ符号があります。 Rubyのremainder()には配当と同じ符号があります。

modulo operationも参照してください。

3

残りの記号は言語によって異なります。それを行う "正しい"方法は、議論のためです...

Rubyは両方の方法を実装しています。 remainder関数はJavaと同じ動作をしますが、modulo%演算子は他のアルゴリズムを使用します。

Wikipediaには、プログラミング言語のリストとそのモジュロの実装方法があります。

3

Rubyはx.modulo(y)x-y*(x/y).floorと定義しているためです。 ruby-doc.org

関連する問題