Javascript は、次のコード スニペットを -1 に評価します。
-5% 4
剰余定理は a = bq + r で 0 ≤ r < b であることを理解しています。上記の定義を考えると、答えは 3 ではないでしょうか? JavaScript が -1 を返すのはなぜですか?
Javascript は、次のコード スニペットを -1 に評価します。
-5% 4
剰余定理は a = bq + r で 0 ≤ r < b であることを理解しています。上記の定義を考えると、答えは 3 ではないでしょうか? JavaScript が -1 を返すのはなぜですか?
モジュロではなく、剰余演算子であるためです。しかし、適切なものの提案があります。
Ecma 5.1 からの引用
被除数 n と除数 d からの剰余 r は、数学的関係 r = n − (d × q) によって定義されます。ここで、q は、n/d が負の場合にのみ負になり、n/d が正の場合にのみ正になる整数です。
その理由は、それが剰余ではなく剰余%
演算子だからです。こちらをご覧ください
...剰余がゼロでない場合、剰余には負と正の 2 つの選択肢があり、商にも 2 つの選択肢があります。通常、数論では常に正の剰余が選択されますが、プログラミング言語は言語と a と n の符号に応じて選択します。( http://en.wikipedia.org/wiki/Modulo_operation )
Pythonでは、除数の符号を取ります:
-5 % 4 == 3 # -5 = (-2) * 4 + 3
被除数の記号を取るjavascriptで:
-5 % 4 == -1 # -5 = (-1) * 4 - 1
を使用%
して剰余演算を行う場合、(少なくとも概念的には)-5 % 4
が -1 と評価されるか 3 と評価されるかは問題ではありません。これらの 2 つの数値は 4 を法として合同であるためです。剰余算術の目的では、それらは同じです。 .