4

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 を返すことを意味します。私は何か間違ったことをしていますか、それとも単なるバグですか?

4

1 に答える 1