2 つの一般的な状況があります。1 つ目は、乱数が必要であり、品質や実行速度にあまりこだわらないことです。その場合は、次のマクロを使用します
#define uniform() (rand()/(RAND_MAX + 1.0))
これにより、0 から 1 - イプシロンの範囲の p が得られます (RAND_MAX が double の精度よりも大きい場合を除きますが、それについて心配する必要はありません)。
int x = (int) (uniform() * N);
0 から N -1 までのランダムな整数を与えるようになりました。
他の分布が必要な場合は、p を変換する必要があります。または、uniform() を数回呼び出す方が簡単な場合もあります。
繰り返し可能な動作が必要な場合は、定数でシードします。それ以外の場合は、time() の呼び出しでシードします。
品質や実行時のパフォーマンスが気になる場合は、uniform() を書き直してください。ただし、それ以外の場合はコードに触れないでください。0 から 1 マイナス イプシロンに常に uniform() を保持します。C++ 乱数ライブラリをラップしてより優れた uniform() を作成できるようになりましたが、これは一種の中レベルのオプションです。RNG の特性が気になる場合は、基礎となるメソッドがどのように機能するかを理解するために少し時間を費やしてから提供することも価値があります。したがって、コードを完全に制御でき、同じシードを使用すると、プラットフォームやリンク先の C++ のバージョンに関係なく、シーケンスが常にまったく同じになることを保証できます。