- 76 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 23:28:51 ]
- // pos は 0 以上 RAND_MAX 以下の整数
pos = rand(); // pos は 0 以上 1 未満の実数 (int pos ならキャストされて整数に) pos = rand() / (RAND_MAX + 1.0); // pos は 0 以上 N 未満の実数 (int pos ならキャストされて整数に) pos = rand() / (RAND_MAX + 1.0) * N; // pos は K 以上 N 以下の整数 (俺が正しいと思ってる書き方) pos = K + (int)( rand() / (RAND_MAX + 1.0) * (N+1-K) ); int pos=(i+1.0) * rand() / (RAND_MAX + 1.0); 除算 "/" 演算は、被除数か除数の一方が float でもないと小数値を切り捨てる。 これは、(RAND_MAX + 1.0) で解消される。 (i+1.0) * rand() の 1.0 は 1 でもいいが、 rand()の値によっては、乗算をした瞬間にオーバーフローする可能性がある。 上に書いたように乗算を後からやれば問題ない。
|

|