-3

2台のマシンで同じコードを実行しています。1つ(Windows 7 64)は以下を使用します:

java version "1.7.0"
java<TM> SE Runtime Environment <build 1.7.0-b147>
Java HotSpot<TM> 64-Bit Server VM <build 21.0-b17, mixed code>

その他(Linux 64)は以下を使用します。

java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)

さまざまな出力が得られます。.classファイルをコピーして実行し、それでも異なる出力が得られたので、これはVMだと思います。誰かがこれを引き起こす可能性があるものを言うことができますか?

編集:

コードはhttp://pastebin.com/5EmYFkYnにあります

出力は実行間で変化するはずですが、これら2台のマシン間ほど大幅には変化しません。

4

2 に答える 2

2

同じLinuxボックスでJava6アップデート31で〜1.78、Java 7アップデート7で〜3.8を取得します。

ただし、ランダムシードnew Random(1)または他の番号を取得した場合、同じ結果が得られます。たとえば、1は常に3番目の数値に対して約0.79を生成します。

ランダムシードがどのように作成されるかについてコードを見ると、コードは完全に異なり、nextDouble()は本来あるべきほどランダムではない、つまり値はもっと変化するはずであり、シードがどのように設定されたかが非常に重要であると思われます。 。


同じバージョンのJavaを使用して同じマシンで実行するたびに、異なる結果が得られます。コードにランダムな要素がある可能性があります。

499470 0 3.7783771731449503 10000.355400975242 0.07565041858446288 42
499430 0 3.8374792234448916 10001.384837656298 0.07684781955465791 53
499604 0 3.868284648304009 10000.698947869778 0.07743242690681965 57
499114 0 3.822480313596936 10001.023197561686 0.07659315164172079 46
500030 0 3.8653339884104576 10000.112232176294 0.077302909223347 43

同じマシンでの実行によって異なるため、マシンやJavaのバージョンによっても異なると思います。

私はまだ、Java7の「何も更新しない」バージョンまたは4年前のバージョンのJava6よりも新しいバージョンのJavaを入手することを真剣に検討します。

于 2012-12-18T16:11:50.887 に答える
0

マシンの1つはjava6を実行し、もう1つはjava7を実行します。これらのバージョン間には多数の変更があります。

http://openjdk.java.net/projects/jdk7/features/

さらに、ドキュメントに記載されていない、または定義されていない動作に影響を与える可能性のある詳細な変更が多数ある可能性があります。

これらの違いのどれがプログラムに影響を与える可能性があるかは、ソースコードを確認するか、少なくとも出力のどのような違いについて話しているのかを知らなければ、判断することはできません。

于 2012-12-18T15:59:09.587 に答える