[解決済み] srand() - なぜ一度しか呼ばないのか?
2023-05-05 10:42:34
疑問点
この質問は、この質問のコメントに関するものです。
srandを初期化するおすすめの方法は?
最初のコメントでは
srand()
はアプリケーションの中で一度だけ呼ばれるべきです。なぜそうなのでしょうか?
どのように解決するのですか?
何を達成しようとしているかによります。
ランダム化は、開始値を持つ関数、すなわち 種 .
つまり、同じ種であれば、常に同じ値の並びを得ることができるのです。
ランダムな値が必要なときに毎回シードを設定しようとすると、シードが同じ数字であれば、常に同じ "random"値を得ることができます。
シードは通常、現在の時刻から取られ、それは秒数で、次のようになります。
time(NULL)
というように、乱数を取る前に必ずシードを設定すれば、srand/rand コンボを何度も呼び出す限り、同じ数値が得られるでしょう。
を同じ秒数で
.
この問題を避けるため、srandはアプリケーションごとに1回だけ設定されます。なぜなら、2つのアプリケーションのインスタンスが同じ秒に初期化されることは疑わしいので、それぞれのインスタンスは異なる乱数列を持つことになります。
しかし、アプリ (特に短いもの、またはコマンド ライン ツールなど) を 1 秒間に何度も実行する可能性がわずかにあり、その場合、種を選択する他の方法に頼らなければなりません (異なるアプリケーション インスタンスで同じシーケンスを使用することが問題でない場合)。しかし、私が言ったように、それは使用するアプリケーションのコンテキストに依存します。
また、精度をマイクロ秒に上げてみるのもいいかもしれません(同じシードの可能性を最小にする)。
sys/time.h
):
struct timeval t1;
gettimeofday(&t1, NULL);
srand(t1.tv_usec * t1.tv_sec);
関連
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] なぜsizeof(x++)はxをインクリメントしないのですか?
-
[解決済み】rand()+rand()で負の数が出るのはなぜ?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
[解決済み] srand(time(NULL)) はシード値を十分に速く変更しない [duplicate] 。
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する
-
[解決済み] LD_PRELOADのトリックとは何ですか?