私はJavaで少しの捕食者 - 獲物のシミュレーションを書いた。ルールが使用される技術は非常に複雑であり、混沌としたシステムで終わる場合でも単純です:基本データ型 Javaは決定的ではありませんか?
- 算術演算および決定は
- 何の並行処理はして、システムを初期化するときだから私は思っ
- 現在の時刻や日付の役に立たない
を発生しません同じ結果を出力するはずの同じパラメータですが、そうではありません。理由は不思議です。
私のアプリケーションではRandom
が使用されていますが、そのテストではすべての値を所定の値で初期化していますので、すべて同じ出力を同じ順序で実行する必要があります。
私はSet
を繰り返していますが、Set
の順番は定義されていません。しかし、私は同じ値で同じ順序で塗りつぶされたSet
がいくつかの実行で異なった振る舞いをしなければならない理由は見当たりません。それは?
私は多くのfloat
を使用しています。 1 + 1 = 1.9999999999725のデータ型は常に私には疑わしいですが、私の行動が私にとって奇妙であっても、それは常に同じ奇妙でなければなりません。ではない?
ガベージコレクションは決定的ではありませんが、デストラクタに依存しない限り、私は安全でなければなりません。
上記のように、実際の使用時間に応じて並行性とデータ型はありません。
単純な例では、その動作を再現することはできません。しかし、私のコードを見て、私は予測できないものは見えません。私の前提は間違っていますか?私は何が欠けている可能性がある任意のアイデア?
は、ここに私の仮定を検証するためのテストです:それは私のため242455.25で常に結果
public static void main(String[] args) {
Random r = new Random(1);
Set<Float> s = new HashSet<Float>();
for (int i = 0; i < 1000000; i++) {
s.add(r.nextFloat());
}
float ret = 1;
int cnt = 0;
for (Float f : s) {
float multiply = 0.3f;
if (cnt++ % 2 == 0) {
multiply = 0.7f;
}
float f2 = (f * multiply);
ret += f2;
}
System.out.println(ret);
}
。
時間関数? – Mysticial
ランダムデータを初期化すると、シードを使用することを意味しますか? – tjameson
これは興味深いと思います。あなたのコードを見てもらえますか? – kol