int RANDOM_FUNCTION( int n )
{
return (int)( rand() / (float)RAND_MAX * n );
}
について
Q1.この関数は0からn-1までの乱数を作るそうなのですが,何故ですか?
0<=rand()<=RAND_MAX
だから0からnまでの乱数ができるような気がするのですが.
Q2.RAND_MAXではなく(float)RAND_MAXとキャストしてある意味は何ですか?
Q3.srand((unsigned)time(NULL));と
srand((unsigned int)time(NULL));では何か違いますか?
Q4.
static int first = 0;
if (first == 0){
srand((unsigned)time(NULL));
first = 1;
}
という処理でsrand((unsigned)time(NULL));は最初の一回だけ呼び出されるようになっているようですが,この部分を
srand((unsigned)time(NULL));
というように毎回呼び出すようにするとどうなりますか?
一回呼び出すだけで乱数系列の初期値が呼び出される時に変化しているのですか?
Q5.この関数とは関係ない質問ですが,例えば
a:int型
b:int型
c:double型
d:float型
のとき
d = a / b + c
という演算は
1 a:int型,b:int型より(a / b)の結果はint型(小数になった場合は小数点以下切り捨て)
2 (a / b):int型,c:double型,int<doubleより
(a / b + c)の結果はdouble型
3 d:float型,『=のあるときは左辺の型に合わせる』よりdはfloat型
というように型変換されているという解釈でいいのでしょうか??
int RANDOM_FUNCTION( int n )
{
return (int)( rand() / (float)RAND_MAX * n );
}
について
Q1.この関数は0からn-1までの乱数を作るそうなのですが,何故ですか?
0<=rand()<=RAND_MAX
だから0からnまでの乱数ができるような気がするのですが.
Q2.RAND_MAXではなく(float)RAND_MAXとキャストしてある意味は何ですか?
Q3.srand((unsigned)time(NULL));と
srand((unsigned int)time(NULL));では何か違いますか?
Q4.
static int first = 0;
if (first == 0){
srand((unsigned)time(NULL));
first = 1;
}
という処理でsrand((unsigned)time(NULL));は最初の一回だけ呼び出されるようになっているようですが,この部分を
srand((unsigned)time(NULL));
というように毎回呼び出すようにするとどうなりますか?
一回呼び出すだけで乱数系列の初期値が呼び出される時に変化しているのですか?
Q5.この関数とは関係ない質問ですが,例えば
a:int型
b:int型
c:double型
d:float型
のとき
d = a / b + c
という演算は
1 a:int型,b:int型より(a / b)の結果はint型(小数になった場合は小数点以下切り捨て)
2 (a / b):int型,c:double型,int<doubleより
(a / b + c)の結果はdouble型
3 d:float型,『=のあるときは左辺の型に合わせる』よりdはfloat型
というように型変換されているという解釈でいいのでしょうか??