0

数か月前、チェスのレーティングを計算する Java アプリケーションを作成しました。自分のコンピューターでしかテストしていませんが、プログラムは期待どおりに機能しました。

特定のオペレーティング システムでは、プログラムが正常に動作しないことがわかりました。Windows 7での誤った出力の画像を含めましたが、これはWindows 8で得られるものです。(プレーヤーのレーティングは、レーティングの低い対戦相手に対して 1.5/5 しか得点しなかったため、減少するはずです)。このプログラムでは、プレイヤーの評価を下げることはできないようです。

これら 2 つのバージョンの Windows 間でプログラムの動作が異なる理由について、誰かが私を正しい方向に向けることができますか? ここSOや他の場所で説明を見つけることができませんでした。

4

3 に答える 3

2

最も妥当な説明は、Windows 7 バージョンのフィールド 2: 2068 に別の引数があるのに対し、Windows 8 には 2048 があるということだと思います。

于 2013-11-09T22:47:20.017 に答える
0

まず、原因ではないことがいくつかあります。

  • 算術演算は、Windows 7 と 8 の Java 間で異なる動作をしません。同じ入力で同じ (シングルスレッド) アルゴリズムを実行している場合、出力は同じになります。

  • 算術演算は、32 ビットと 64 ビットの JVM で変わりません。

それで、それは何でしょうか?同じ JAR であると仮定すると、アルゴリズムは変わらない可能性があります。したがって、いくつかの可能性があります。

  • これは、さまざまな入力の結果である可能性があります。アルゴリズムを見ずに、予期しない方法で入力に敏感になる何かがある可能性を排除することはできません.

  • コードに競合状態があった場合、CPU 速度、メモリ アーキテクチャ、スレッド スケジューリングの違いにより、一部の Java プラットフォームでプログラムの一部が正しく動作しないことがわかります。


これは、コードを見なくても得られる可能性のある正確な答えです。したがって、これを自分でデバッグする必要があると思います。

  • 問題が発生している Windows 7 マシンにアクセスします。

  • デバッガーを接続してアプリケーションを実行し、これらの条件下で問題が再発するかどうかを確認します。動作している場合は、通常の方法でデバッグして、アルゴリズムが機能しない理由を突き止めます。

  • デバッガーをアタッチする (およびブレークポイントを設定する) と、プログラムの動作が変化する (つまり、問題が「なくなる」) 場合、何らかの競合状態を示す証拠があります。

于 2013-11-09T23:43:39.330 に答える