C ++-std :: srand



C Std Srand



ヘッダーで定義-ヘッダーファイルで定義

1. std::string::empty

void srand (unsigned int seed)



乱数ジェネレーターの初期化-疑似乱数ジェネレーターの初期化(関数)

疑似乱数ジェネレータは、seedとして渡された引数を使用して初期化されます。
疑似乱数ジェネレーターの使用seed渡されたパラメーターは初期化されます。



さまざまなseedごとにsrandの呼び出しで使用される値の場合、疑似乱数ジェネレーターは、後続のrandの呼び出しで異なる一連の結果を生成することが期待できます。
電話用srand使用するたびseed値、後続のrandで疑似乱数ジェネレーターを期待できます呼び出し中にさまざまな結果シーケンスが生成されます。

同じseedを使用した2つの異なる初期化後続のrandの呼び出しで、同じ一連の結果が生成されます。
同じですseed 2つの異なる初期化の後にrandが続きます同じ結果シーケンスが呼び出しで生成されます。

seedの場合が1に設定されている場合、ジェネレータは初期値に再初期化され、randを呼び出す前と同じ値を生成します。またはsrand
よろしければseed 1に設定すると、ジェネレーターが初期値に再初期化され、randが生成されて呼び出されます。またはsrand以前と同じ値。



ランダムな数を生成するために、srand通常、関数timeによって返される値など、特定のランタイム値に初期化されます。 (ヘッダーで宣言されています)。これは、ほとんどの些細なランダム化のニーズに十分に特徴的です。
ランダムな数を生成するために、通常srandたとえばtimeによっていくつかの一意のランタイム値に初期化されます関数によって返される値(ヘッダーfileStatement内)。これは、ほとんどの些細なランダム化要件に対して十分に一意です。

std::rand()で使用される疑似乱数ジェネレーターをシードします値はseedです。
値によるseed播種std::rand()使用される疑似乱数ジェネレータ。

rand()の場合srand()rand()への呼び出しの前に使用されますsrand(1)がシードされているかのように動作します。
ある場合srand()電話をかける前にrand()、次にrand()まるでsrand(1)のように振る舞います播種。

毎回rand()同じseedがシードされている場合、同じ値のシーケンスを生成する必要があります。
同じseed播種rand()の場合、同じ値のシーケンスを生成する必要があります。

srand()スレッドセーフであるとは限りません。
srand()スレッドセーフであるとは限りません。

dereference [ˌdiːˈrefrəns]: v. Indirect reference, indirect access, dereference reallocate [ˌriːˈæləkeɪt]: v. Reallocate, then assign

一般的に、疑似乱数ジェネレーターは、プログラムの開始時にrand()を呼び出す前に、一度だけシードする必要があります。疑似乱数の新しいバッチを生成するたびに、繰り返しシードしたり、再シードしたりしないでください。
一般的に、疑似乱数ジェネレーターは1回だけシードする必要があります。プログラムの開始時に、any rand()電話の前に。疑似乱数の新しいバッチを生成するたびに、シードまたは再シードを繰り返さないでください。

標準的な方法は、time(0)への呼び出しの結果を使用することです。種として。ただし、time() time_tを返します値、およびtime_t整数型であるとは限りません。ただし、実際には、すべての主要な実装でtime_tが定義されています。整数型であり、これはPOSIXが要求するものでもあります。
標準的な方法はtime(0)を使用することですシード呼び出しの結果。ただしtime()戻るtime_t保証なしの値time_t整数型です。実際には、主流の実装はすべて定義しますtime_tこれは整数型であり、これはPOSIXでも必要です。

2.パラメータ

seed
seedとして使用される整数値疑似乱数ジェネレータアルゴリズムによる。
疑似乱数ジェネレータアルゴリズムは、seedの整数値として使用されます。

シード値

3.戻り値

なし-なし

4.例

srand(time(NULL))

現在の時刻を使用して、疑似乱数ジェネレーターを初期化します。
time(NULL)関数の戻り値はas srand()です。関数のパラメーター。srand(time(NULL))現在のシステム時刻を乱数のシードとして使用して乱数を生成し、NULLに設定します。システムの現在の時刻を秒単位で取得します。

4.1 std::srand

//============================================================================ // Name : std::srand // Author : Yongqiang Cheng // Version : Version 1.0.0 // Copyright : Copyright (c) 2019 Yongqiang Cheng // Description : Hello World in C++, Ansi-style //============================================================================ #include /* printf, NULL */ #include /* srand, rand */ #include /* time */ int main() { printf('First number: %d ', rand() % 100) srand(time(NULL)) printf('Random number: %d ', rand() % 100) srand(1) printf('Again the first number: %d ', rand() % 100) return 0 }

可能な出力:

First number: 83 Random number: 13 Again the first number: 83

4.2 std::srand

//============================================================================ // Name : std::srand // Author : Yongqiang Cheng // Version : Version 1.0.0 // Copyright : Copyright (c) 2019 Yongqiang Cheng // Description : Hello World in C++, Ansi-style //============================================================================ #include #include #include int main() { std::srand(std::time(0)) // use current time as seed for random generator int random_variable = std::rand() std::cout << 'Random value on [0 ' << RAND_MAX << ']: ' << random_variable << ' ' return 0 }

可能な出力:

Random value on [0 2147483647]: 631634451

5.データの競合-データの競合

この関数は、内部状態オブジェクトにアクセスして変更します。これにより、randへの同時呼び出しでデータの競合が発生する可能性があります。またはsrand
この関数は、内部状態オブジェクトにアクセスして変更します。これにより、同時呼び出しが発生する可能性がありますrandまたはsrandデータの競争。

一部のライブラリは、randの代替機能を提供しますこれにより、この種のデータ競合が明示的に回避されます:rand_r (ポータブルではありません)。
一部のライブラリはrandを提供します代替機能であるこの種のデータ競合を明らかに回避します:rand_r (ポータブルではありません)。

C ++ライブラリの実装では、data racesがないことを保証できます。この関数を呼び出すため。
C ++ライブラリの実装により、この関数を呼び出すときにデータの競合が発生しないようにすることができます。

6.例外安全性-例外安全性

スローしない保証:この関数は例外をスローしません。
スロー保証なし:この関数は例外をスローしません。

assignment [ə'saɪnmənt]: n. assignment, assignment, assignment

参考文献

http://www.cplusplus.com/reference/cstdlib/srand/
https://en.cppreference.com/w/cpp/numeric/random/srand