乱数がかぶっているような? – プログラミング – Home

乱数がかぶっているような?
 
通知
すべてクリア

乱数がかぶっているような?


tora
 tora
(@tora)
ゲスト
結合: 22年前
投稿: 8
Topic starter  

たびたびすいません.
srand(10);
int k,x,y;

for(k=0;k<500;k++)
{  
  x=(rx*rand()/RAND_MAX/10)*10;
y=(ry*rand()/RAND_MAX/10)*10;
dc.Rectangle(x-0,y-0,x+10,y+10);
}
dc.SelectObject(pPrevBrush);
というプログラムなのですが、乱数がかぶってしまいます.
もっとランダムにしたいのですが、どなたか教えていただけませんか.


引用解決済
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

int n = 100; などとしておけば、
x = rand() % n; で、x には 0 ~ n-1 が代入されます。

どんな乱数が必要なんですか?
範囲は?
整数?小数?


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

> 乱数がかぶってしまいます.
とは、500回繰り返しているうちに同じ数が出てしまったという事でしょうか?
もしそうでしたら、一度使用した数を2度使わないように自分で処理する必要があります。


返信引用
ボコノン教徒
 ボコノン教徒
(@ボコノン教徒)
ゲスト
結合: 22年前
投稿: 90
 

> 乱数がかぶってしまいます

VC++のヘルプより

void main( void )
{
int i;

/* 実行するたびに違う値が得られるように、現在の時刻値を使って
* 乱数ジェネレータを初期化します。
*/
srand( (unsigned)time( NULL ) );

/* 10 個の値を表示します。 */
for( i = 0; i < 10;i++ )
printf( %6d\n, rand() );
}


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

> /* 実行するたびに違う値が得られるように、現在の時刻値を使って
> * 乱数ジェネレータを初期化します。
> */
あ、そのセンも考えられますね。

どちらのケースの事なんでしょう?


返信引用
FrozenAquarium
 FrozenAquarium
(@FrozenAquarium)
ゲスト
結合: 22年前
投稿: 22
 

rand()は擬似乱数を返す関数なので
かぶることはないと思いますが、
toraさんの場合、下1桁を切り捨てているため、
例えば
201->200
206->200
となり、かぶっている状態になるのでしょう。
だから、下一桁を切り捨てるのではなく....


返信引用
suzugoya
 suzugoya
(@suzugoya)
ゲスト
結合: 22年前
投稿: 47
 

ついこの前、全く同じ状況で悩みました

結局、ボコノン教徒さんの指摘されているように
srand( (unsigned)time( NULL ) );
for(i=1;i<=ryusisu;i++){
  x[i] = 50 * (double)rand()/RAND_MAX;
y[i] = 50 * (double)rand()/RAND_MAX;
}

初期設定をすることで、解決しました

後は、このルーチンを繰り返し呼び出すだけです
乱数に少し偏りはありますが、同じ系列を繰り返すことはなくなりました


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました