http://blog.xkcd.com/2010/02/09/math-puzzle/で見つけた数学パズルをシミュレートしようとしています。ただし、Java ランダム クラスは奇妙な結果を返します。以下のコードでは、期待どおりの結果が得られます。出力は、最初の行では約 .612 で、2 番目の行では .49 から .51 の間です。int 試行 = 10000000; int 成功 = 0;
int returnstrue = 0;
for (int i = 0; i < trials; i++) {
Random r = new Random();
//double one = r.nextDouble()*10000;
//double two = r.nextDouble()*10000;
double one = 1;
double two = Math.PI;
double check = r.nextDouble();
boolean a = r.nextBoolean();
if(a)
{
returnstrue++;
}
if(a){
if((check>p(one)) && two > one)
{
success++;
}
if((check<p(one))&& two<one)
{
success++;
}
}
else{
if((check>p(two)) && two < one)
{
success++;
}
if((check<p(two))&& two>one)
{
success++;
}
}
}
System.out.println(success/(double)trials);
System.out.println(returnstrue/(double)trials);
ただし、行を切り替えると
double check = r.nextDouble();
boolean a = r.nextBoolean();
に
boolean a = r.nextBoolean();
double check = r.nextDouble();
出力は、最初の数値で約 .476、2 番目の数値で約 .710 です。これは、後の構成で nextBoolean() メソッドが 70% の確率で true を返すことを意味します。私は何か間違ったことをしていますか、それとも単なるバグですか?