-4

最近のほとんどのコンピューターは、非決定論的な動作を示します。これにより、コンピューター クロックを読み取るための 2 つの連続する呼び出しの間に発生するクロック サイクル数を知ることができなくなります。

次のコードは、コンピュータ クロックを使用した 1 バイトの疑似乱数ジェネレータです。

unsigned long occurrences = 0;
unsigned long total = 0;

while (true) {
    if ((clock() & 0xFF) == 60) // testing ocurrences for a given number, 60 for instance
        occurrences++;
    total++;
    printf("%f\n", (float)occurrences / (float)total ); // this should be approximately 1/256 = 0.00390625
}

たとえば、暗号化などの深刻なアプリケーションを除いて、ゲーム用のモバイル プラットフォームで使用できます。

そのような実装の長所と短所は何でしょうか。

4

2 に答える 2

1

そのようなポインターの代わりにユニオンを使用して「分割」を行う必要があります。

そして、乱数と時計は 2 つの完全に異なるものであり、あなたは質問をするというよりも声明を出したことに同意します。

于 2013-01-02T09:30:10.490 に答える
1

rand()または、より具体的には、を使用する適切な方法がありませんsrand()

srand()プログラムの実行中に一度だけ呼び出す必要があります。srand()ループで呼び出さないでください。srand()への各呼び出しの前に呼び出さないでくださいrand()。適切な管理を確実にする最善の方法srand()は、関数内で一度呼び出すことでmain()あり、その後は忘れて、rand()後で使用するだけです。

#include <stdlib.h> /* rand, srand */
#include <time.h>   /* time */

int main(void) {
    /* initialization */
    srand(time(NULL));

    /* input, possibly calling rand() */

    /* process, possibly calling rand() */

    /* output, possibly calling rand() */

    /* termination */
    return 0;
}
于 2013-01-02T10:21:57.620 に答える