私はプロジェクトにPHPを使用しており、-1 % 4
は3
を返すと予想しています。しかし、最終的な結果は、PHPで-1
で、なぜ私にはわからない:-1%4の正解は何ですか?
php > echo -1 % 4;
-1
私はRubyのIRBで確認し、結果は3
です:
irb(main):001:0> puts -1 % 4
3
私はプロジェクトにPHPを使用しており、-1 % 4
は3
を返すと予想しています。しかし、最終的な結果は、PHPで-1
で、なぜ私にはわからない:-1%4の正解は何ですか?
php > echo -1 % 4;
-1
私はRubyのIRBで確認し、結果は3
です:
irb(main):001:0> puts -1 % 4
3
それは分裂の観点で定義されていますので、次のようになります。
a%b == a - (a/b)*b
否定結果を含む除算には、2つの可能な定義があります。あなたはゼロに向かって丸めるか、負の無限大の方に丸めます。さまざまなプログラミング言語がその選択肢を異ならせています。
詳細については、http://en.wikipedia.org/wiki/Modulo_operator#Remainder_calculation_for_the_modulo_operationを参照してください。
私は間違いなくこれを読んでいますが、その計算は 'a - a'を与えて0を生成しませんか? –
@RobinCastlin:いいえ、これは整数計算で実行されているためです。 –
これらの2つの特定の言語では、負のオペランドを含む整数の除算を処理する場合、PHPは結果をゼロに丸めますが、Rubyは-infinityに丸めます。 PHPで
被除数と同じ符号を有する
%
モジュラス演算子の結果。 Rubyで
、Numeric#divmod
から:
商は-Infinity
%手段 '-1 MOD(4) '及び-1数学 – safarov
その同等に向かって丸められ@ safarov:実際には、 '%'は通常** remainder **演算子として定義されていますが、これはあまり定義されていない数学的定義です。 –
@safarov "in math"は幅広い声明です。あなたがZ_4を扱っているなら、-1と3は同じオブジェクトです。 – Dougal