はじめまして。
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 です。
時間を使用した乱数
Re:時間を使用した乱数
rand3()の中にある
return i;
の場所が正しくありません。
それから、乱数を初期化するのは、最初に一度だけで十分です。
今のコードでは、rand3()の中で毎回初期化しているため、
0000000000
1111111111
-1-1-1-1-1-1-1-1-1-1
のいずれかの結果しか得られないことでしょう。
return i;
の場所が正しくありません。
それから、乱数を初期化するのは、最初に一度だけで十分です。
今のコードでは、rand3()の中で毎回初期化しているため、
0000000000
1111111111
-1-1-1-1-1-1-1-1-1-1
のいずれかの結果しか得られないことでしょう。