私のモジュール分割が正しい場合。1 / 5 mod 11 = 9
. 誰かがこれを確認できますか?
ただし、Java では。1 / 5 % 11 = 0;
ここで何が起こっているのかわかりません。それは私の構文ですか、何らかの方法で括弧で囲む必要がありますか?
私は今混乱しています:)
誰かがアドバイスできますか?
ありがとう
1 / 5 mod 11 = 9.誰かがこれを確認できますか?
(9 * 5) % 11 = 45 % 11 = 1. つまり、「mod 11」の国では、9 は 5 の剰余乗法逆数です。
問題は、Java には整数しかなく、剰余算術がないことです。Java では、%
は のような単なる演算子です*
。
http://en.wikipedia.org/wiki/Modular_arithmeticから
剰余算術の概念は、除算の剰余の概念に関連しています。
mod 11
とは関連% 11
していますが、同じものではありません。
これは (1/5) mod 11 と同じです。
(または、1 / (5 mod 11) と同じで、まだ 1/5 == 0 [左から右へ、実際には (1/5) mod 11 になります])
1 / 5 = 0 (整数の場合)
0 mod 11 = 0
http://www.difranco.net/cop2551/java_op-prec.htmは、*、/、および % の優先順位が同じであることを示していますが、式では / が % よりも優先されます。したがって、上記のJavaの結果はJLSに関して正しいです。
これは、演算子の優先順位によるものです。
Javaは、エクスプレスを簡素化する場所を通過します。いくつかの操作を実行し、次のパスで他の操作を実行します。「最高」の演算子が最初に実行されます。たとえば、掛け算は足し算の前です。演算子( )
は最初のパスにあり、実行される通常の順序をオーバーライドできます。
このチャートを参照してください:ここにリンクの説明を入力してください
%
は および と同じグループに*
あり/
ます。それらは左から右に行われます。
あなたが望んでいるのは(1/5) % 11
しかし、これが浮動小数点演算で行われるという別の問題があるため、正確な正解ではなく近似値が得られます。
BigInteger
組み込みのプリミティブの代わりにクラスを使用する必要があります。