PHP の 8%-3 が 0 に等しいのはなぜですか?
PHP では、いくつかの単純な数学的演算の場合、常に正しい結果が得られることを望んでいます。ただし、単純な操作の結果が私たちを混乱させることがあります。 PHP と同様に、8%-3 の計算結果は 0 になります。なぜこのようなことが起こるのでしょうか?
この問題を理解するには、まずモジュロ演算の定義を理解する必要があります。数学におけるモジュロ演算は、通常「a mod n」で表される剰余を求めることです。ここで、a は被除数、n は除数です。モジュロ演算の結果は、0 から n-1 までの非負の整数になります。たとえば、9 mod 4 の結果は 1 になります。これは、9 を 4 で割ると 2 余り 1 に等しいためです。
PHP では、モジュロ演算は % 記号で表されます。 PHPのマニュアルによると、モジュロ演算の結果の符号は被除数と同じです。つまり、配当がプラスであれば結果もプラスになり、配当がマイナスであれば結果もマイナスになります。
質問に戻りますが、8 を 3 で割ると 2 余り 2 になります。モジュロ演算の定義によれば、結果は 2 になるはずです。しかし、PHP では、8%-3 の結果は 0 になります。これはモジュロ演算の定義に違反しますか?
実際、この現象は PHP に固有のものではなく、モジュロ演算を定義する方法に起因します。一部のプログラミング言語では、モジュロ演算の結果が負になる場合があります。具体的な定義はプログラミング言語の仕様によって異なります。 PHP では、モジュロ演算の「ゼロ方向への丸め」ルールが使用されます。
PHP マニュアルによると、被除数が正の数の場合、モジュロ演算の結果は被除数と除数の剰余に等しく、被除数が負の数の場合、モジュロ演算の結果はモジュロ演算は、四捨五入後の被除数を除数で割った結果の剰余 (0 より大きい方) に等しくなります。つまり、PHP のモジュロ演算の結果は常に被除数の絶対値よりも小さくなりますが、符号は被除数と同じになります。
それでは、8%-3 の例に戻ります。 8 は正の数、-3 は負の数です。 「ゼロ方向への丸め」ルールによれば、モジュロ演算の結果は、8 を -3 で割った結果と 0 の大きい方の余りになるはずです。 8を-3で割って四捨五入した結果は-3ですが、0より大きいほうは0のままです。
したがって、8%-3 の結果は 0 と等しくなります。
この定義方法により、シナリオによってはコードのロジックを簡素化できますが、誤解されやすい場合もあります。正の数の余りを取得したい場合は、PHP が提供する関数 fmod() を使用できます。この関数は、浮動小数点数の除算の余りを返します。
要約すると、モジュロ演算の定義方法、つまり「ゼロ方向への丸め」ルールにより、PHP の 8%-3 は 0 に等しくなります。この現象を理解するには、使用するプログラミング言語のモジュロ演算の仕様を理解し、実際の状況に応じて適切な演算方法を選択する必要があります。
以上がPHP の 8%-3 が 0 に等しいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。