2016-04-29 23 views
0

を表示されません。私はコイントスをシミュレートするために、乱数ジェネレータを望んでいたし、ここで私は20で16頭と4尾を得たような結果が落胆してコインは、乱数を使用して正確にランダム

public class CoinToss 
{ 
    public static void main(String args[]) 
    { 
     int num=(int)(1000*Math.random()); 
     if(num<500) 
      System.out.println("H"); 
     else 
      System.out.println("T"); 
    } 
} 

やったことだトス走る これはではなく、と表示されます。その可能性がありますが、私はプログラムが正しければ一般的な意見を欲しいですか?私は何かを数学的に欠いていますか?

+0

^^ランダム性のあるものだと思います。よりよい結果が得られるかもしれません。 – Hackerdarshi

+1

20個のサンプル大きな試料(少なくとも10K)で再度無意味数学的に言えば、トレイある – Preuk

+1

ええ、@Preukは正しいです。私はちょうどMAX_INTとあなたの例に掛け、ここでの結果です:H:1073754033、T:1073729614 – Christoph

答えて

0

あなたのコードを少し修正し、十分にランダムなようです。

コード:

int h = 0; 
    int t = 0; 
    for (int i = 0; i < 1000; i++) { 
     int num = (int) (1000 * Math.random()); 
     if (num < 500) { 
      h++; 

     } else { 
      t++; 

     } 
    } 
    System.out.println("T:" + t); 
    System.out.println("H:" + h); 

出力:

T:506 
H:494 

私は、これはそれにいくつかのより多くの時間を実行してみてください

0

あなたのコードは、あなたが簡単にそれを実装することができますが、正しいと思わ:

Random r = new Random(); 
int num = r.nextInt(2); 
if (num == 0) 
    System.out.println("H"); 
else 
    System.out.println("T"); 

Random#nextInt(int i)はあなたがそれぞれの同じ数を取得するために、道以上の入力を必要とする0i-1

+1

:-): 'r.nextBoolean();';) – Kayaman

0

の間のランダムな整数を返します。 。そのような少数のアウトプットのために、数字の点でお互いに近くなることがあります。実際には、4のテールと16のヘッドを持つ確率は、いくらか "現実的"になる0.462%です。実行回数を増やしてより多くのものを試して、それがどのように動作するかを見てみましょう。

そして、ところで、この入力を考える:

6 6 6 6 6 6 6 6 6 6 

は右、ランダム思わないのか?しかし、それはある時点で数字πの10進数で存在するので、そのランダムなシリーズの一部です。それはちょうどシリーズのサイズの問題なので、あなたは乱数を使って作業するときにそのように考える必要があります。結果についてではなく、ランダムジェネレーターについてもっと考えてみてください。 System.nanoTime()に基づいて正しい関数を使用しているので、ジェネレータは正しいですが、結果は小さくなります。

1

20ランはそれがどれほどランダムであるかを評価するのに十分なサンプルサイズではありません。このように考えてみましょう。あなたが4回走って4頭を持っていれば、「うわー、それはまったくランダムではありません」と思うでしょう。しかし、実際に4枚のコインを払って16回反転させると、少なくとも4回はすべてのヘッドを一回は得ることになるでしょう。したがって、実行回数が少なく、頭と尾の間で均等に分割されない結果が得られる場合、それはランダムではありません。

「Heads」と「Tails」、「Heads」などを印刷したコードを書いた場合、頭の半分と半分の尾が正確に表示されます。しかし、それは全くランダムではありません!それはちょうど繰り返すパターンです。

ランダムな結果が短期間で不均一に見える場合、ストーリーのモラルは驚くべきではありません。あなたのコードを書き直して、頭の数と尾の数を数え、それを100万回程度振ってみましょう。そして、あなたはそれぞれ約500,000を得ないかどうかを見てください。ランダムはあなたに正確を与えるわけではありませんが、それはより近づくはずですので、少し多めにしてください。

0

決定論的ランダムビットジェネレータ(DRBG)としても知られている擬似乱数生成器(PRNG)は、乱数列の性質を近似する数列を生成するアルゴリズムです。それは完全に初期値の比較的小さいセットによって決定されるので

PRNG-生成されたシーケンスは、真にランダムではない、PRNGシードと呼ば真にランダムに生成することが可能に近い配列が、

乱数を生成する算術的方法を考える人は、もちろん罪の状態です。 John von Neumann

関連する問題