0

ドライバー ファイルのメインで srand(2) を宣言している場合、ドライバーにリンクされているコード ファイルで srand(2) を宣言する必要がありますか?

ありがとう。

編集

(以下、ユーザーのコメントより)

私が行った場合、

srand(2);
srand(2);

シードを 2 として取得できますか? または、他の何か?

4

3 に答える 3

2

srand(2)は、乱数ジェネレーターのシードを2に設定します。同じパラメーターを使用して再度呼び出すと、シードが再び2に設定され、乱数ジェネレーターが同じ出力を作成します。

参考までに、ドライバーが独自のsrandのコピーを使用している場合(つまり、DLLである場合)、メインの実行可能ファイルで使用されているランダムジェネレーターに影響を与えない可能性があります。

于 2008-11-28T20:31:04.547 に答える
1

質問をもう少し明確にする必要があると思いますが、一般に、特定の翻訳単位で使用するすべての関数を宣言する (ただし定義しない) 必要があります。.cpp ファイルで srand を使用する場合は#include <stdlib.h>、そのファイルで使用する必要があります。

srand の使用方法については、そのドキュメントを参照してください。通常、特定のプロセスで 1 回だけ呼び出す必要があります。その後は、実行するたびに疑似乱数の同じシーケンスが期待できます。同じシードで再度呼び出すと、値のシーケンスが再開されます。実行ごとに異なる値が必要な場合は、現在の時刻でシードしてみてください。

編集:

次のような 2 つのファイルがあるということですか。

// Driver.cpp
#include <stdlib.h>
#include "otherfile.h"

int main()
{
    srand(2);
    Somefunc();
}

そして、リンクされた別のファイル:

// OtherFile.cpp
#include <stdlib.h>
#include "otherfile.h"

void SomeFunc()
{
    // You don't need to call srand() here, since it's already been called in driver.cpp
   int j = rand();
}
于 2008-11-28T20:16:06.310 に答える
0

特定のシードで srand() を呼び出すと、以前の srand() の呼び出しに関係なく、そのシードのシーケンスが開始されます。たとえば、srand(2) を呼び出すたびに、その後 rand() を呼び出すと、毎回同じ順序で同じ番号が返されます。そう:

srand(2);
srand(2);

冗長です。このリンクには、srand の適切な説明があります。

于 2009-08-27T19:24:18.843 に答える