0

なぜこのプログラムは 0.1 から 0.2 までの数値しか生成しないのですか? 0 ~ 1 の数値を生成する必要があります。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (int argc, char *argv[])
{
    /*declare pseudo-random number */
    float random;
    srand(time(NULL));

    random = (float) rand() / (float) RAND_MAX;
    printf("The random number is %f\n", random);

    return 0;
}

Macでgccを使用してコンパイルしています。

4

3 に答える 3

4

コードは私には問題ないようです。複数の数値を生成してみてください。

for(i=1; i<100; i++){
  random = (float) rand() / (float) RAND_MAX;
  printf("%f\n", random);
}
于 2012-10-21T17:16:19.347 に答える
1
 int random_seed;
    void __cdecl srand(int data){
       random_seed = data;
    }

    int __cdecl rand (
            void
            )
    {
            return( ((random_seed = random_seed * 214013L
                + 2531011L) >> 16) & 0x7fff );
    }

これは、Windows CRTでのsrand()とrand()の実装です。これでMSに訴えられるかどうかはわかりません。

明らかに、0と1の間の適切な値を取得するには、rand()を何度も呼び出さなければならない場合があります。time()が何を返しても[random_seedにのみ設定されるため]。

于 2012-10-21T17:32:19.833 に答える
0

上記のコードは私(ubuntuのgcc)にとってはうまくいきました。つまり、私の出力は0.1から1まで変化していました。プログラムを3〜4回実行してから、出力を確認してください。

于 2012-10-21T17:31:44.413 に答える