1

[0, 1.0] の間で乱数を生成する

i = (float) rand() / RAND_MAX / 1;

小数点 1 桁だけではなく、変数に小数点 1 桁を設定したい どうすればよいでしょうか?

(つまり 0.1 ; 0.1224828 ではありません)

4

3 に答える 3

6

あなたが実際に記述しているのは、0 から 10 の範囲の可能な値を持つランダムな整数です。したがって、次のように記述します。

int i = rand() / (RAND_MAX / 11 + 1);

iまたは実際には、0 <= i <= 10 のような整数を生成する他の方法。

さて、iあなたの値は10でスケーリングされます.

10 で割りたい場合は、次のようにします。

float f = i / 10.0;

2 進浮動小数点変数は、0.1、0.2、0.3、0.4、0.6、0.7、0.8、および 0.9 を正確に表すことができないことに注意してください。リスト内で正確に表現できる値は、0.0、0.5、および 1.0 だけです。これが、情報を整数変数に格納するほうがよい理由です。

:他の人が指摘したように(ありがとう)、明らかなものrand() % 11はランダム性の特性が貧弱です。それを使用しないように回答を更新しました。

于 2013-03-28T14:11:01.133 に答える
3

値「R」を浮動小数点変数に格納する場合、「R」を格納できないことがよくあります。代わりに、 'R' に最も近い正当な浮動小数点値を格納する必要があります。comp.lang.c FAQ

範囲内でランダムな整数を生成しようとしていない場合でも、特定の範囲でランダムな整数を取得するにはどうすればよいですか? を読む必要があります。 この表現

(int)((double)rand() / ((double)RAND_MAX + 1) * N)

明らかなよりも優れていrand() % Nます。また、その教訓は他の文脈にも当てはまります。

于 2013-03-28T14:19:30.460 に答える
0

試す:

i = ((float)( rand()%11) ) /10;
于 2013-03-28T14:11:01.233 に答える