時間を使用した乱数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kazuoni

時間を使用した乱数

#1

投稿記事 by kazuoni » 17年前

はじめまして。
c言語は始めてまだ1ヶ月弱です。
時間を利用した乱数を作っていたんですが、うまく動かないので質問させていただきます。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int rand3()

{

double ransuu;
int i;
srand((unsigned)time(NULL));
ransuu = rand()/(RAND_MAX+1.0);
i = 0;
if ( ransuu < (0.333333333333))
{
i = -1;
}

if ( ransuu >= (0.66666666666))
{
i = 1;
return i;
}
}

int main()
{
int l;
for(l=1;l<=10;l++)
{
printf("%d",rand3());
}
}

関数ひとつとメイン関数で表示して、現時刻より乱数の種の初期値を決め、-1、0、1のみを出力するという条件で書きました。
これをコンパイルすると結果は「0000000000」になってしまいます。処理する時間が短すぎるためにこうなってしまうのでしょうか?この条件を満たすためにはどうしたらよいでしょうか。
お忙しいところ申し訳ありません。ご返答よろしくお願いします。
OSはVISTA、コンパイラはVisual C++ 2008 Express Edition です。

box

Re:時間を使用した乱数

#2

投稿記事 by box » 17年前

rand3()の中にある
return i;
の場所が正しくありません。


それから、乱数を初期化するのは、最初に一度だけで十分です。
今のコードでは、rand3()の中で毎回初期化しているため、
0000000000
1111111111
-1-1-1-1-1-1-1-1-1-1
のいずれかの結果しか得られないことでしょう。

閉鎖

“C言語何でも質問掲示板” へ戻る