2012-03-24 9 views
0

私はプロジェクトにPHPを使用しており、-1 % 43を返すと予想しています。しかし、最終的な結果は、PHPで-1で、なぜ私にはわからない:-1%4の正解は何ですか?

php > echo -1 % 4; 
-1 

私はRubyのIRBで確認し、結果は3です:

irb(main):001:0> puts -1 % 4 
3 
+1

%手段 '-1 MOD(4) '及び-1数学 – safarov

+2

その同等に向かって丸められ@ safarov:実際には、 '%'は通常** remainder **演算子として定義されていますが、これはあまり定義されていない数学的定義です。 –

+4

@safarov "in math"は幅広い声明です。あなたがZ_4を扱っているなら、-1と3は同じオブジェクトです。 – Dougal

答えて

5

それは分裂の観点で定義されていますので、次のようになります。

a%b == a - (a/b)*b 

否定結果を含む除算には、2つの可能な定義があります。あなたはゼロに向かって丸めるか、負の無限大の方に丸めます。さまざまなプログラミング言語がその選択肢を異ならせています。

詳細については、http://en.wikipedia.org/wiki/Modulo_operator#Remainder_calculation_for_the_modulo_operationを参照してください。

+0

私は間違いなくこれを読んでいますが、その計算は 'a - a'を与えて0を生成しませんか? –

+0

@RobinCastlin:いいえ、これは整数計算で実行されているためです。 –

1

これらの2つの特定の言語では、負のオペランドを含む整数の除算を処理する場合、PHPは結果をゼロに丸めますが、Rubyは-infinityに丸めます。 PHPで


Arithmetic Operatorsから:

被除数と同じ符号を有する%モジュラス演算子の結果。 Rubyで

Numeric#divmodから:

商は-Infinity

関連する問題