2

ランダムな x 座標と y 座標を持つ 100 個のノードを生成したいと考えています。しかし、範囲を指定したくありません。rand(100) のように、1 から 100 の間の数値のみが生成されます。Cを使用してどのように実装できますか? 私が試してみました:

 int gen_rand_position(void)  
{  
     int i,j,a[100],b[100];  
    for(i=0,j=0;i<100,j<100;i++,j++)  
{
    x=rand();  
        y=rand();  
    a[i]=x;  
    b[j]=y;  
}  
}

これはランダムに選択するのではありません。より効率的なランダム関数を使用できますか?

4

2 に答える 2

5

それ以外の場合は、無限の数で何をするつもりですか?

引数なし - rand() は、0 から RAND_MAX までの整数 (通常は 32765) を返します。

これより大きな数値が必要な場合は、2 つの rand() 数値を組み合わせることができます。ランダム性を変更しないように乱数を組み合わせる最良の方法については複雑な統計的議論がありますが、それについて心配する必要はないと思います。

編集: RAND_MAX は (この場合) 15 ビットの数値であるため、30 ビットの範囲を取得するには、2 つの rand() を一緒に乗算し、32 ビットの範囲を再度乗算します。

于 2012-11-16T16:55:14.093 に答える
1

範囲全体に分散された乱数を取得するにはint、複数の呼び出しからのランダム ビットを次のように結合しますrand()

#include <stdlib.h>

int large_rand()
{
  const int RAND_BITS = 15;  /* covers stdc minimum for RAND_MAX */
  const int INT_BITS = 8 * sizeof(int);
  const int ITERS = (INT_BITS + RAND_BITS - 1) / RAND_BITS;
  int i, result = 0;
  for (i = 0; i < ITERS; i++) {
    result <<= RAND_BITS;
    result |= rand() & ~(~0U << RAND_BITS);
  }
  return result;
}

目的の範囲の乱数を取得するには、 を使用しますlarge_rand() % (MAX + 1)。ここで、MAXは取得する最大の数値です。

于 2012-11-16T17:11:26.217 に答える