GNU CのAからB(A、Bはint)間の擬似乱数の生成方法ライブラリGNU CのAからBへの擬似乱数の生成方法(A、Bはint)標準ライブラリ
ありがとうございました!その後、何これについて< Bを想定すると
GNU CのAからB(A、Bはint)間の擬似乱数の生成方法ライブラリGNU CのAからBへの擬似乱数の生成方法(A、Bはint)標準ライブラリ
ありがとうございました!その後、何これについて< Bを想定すると
...以下のコメントを1として
srand((unsigned)time(NULL));
r = (rand()%(B-A)) + A;
、B-Aは、実際には、RAND_MAXよりも大きいことが可能です。この場合は、より注意する必要があります。
私自身の答えはここでコメントしますが、明確にするために、Karl K. srand関数は一度呼び出すだけでよい。 –
間隔 'B-A'が 'RAND_MAX + 1 'より大きい場合は注意してください。その場合、 'r'の値は一様に分布しません。' r'の最大値は 'RAND_MAX + A'になります。 –
彼はAとBがintであり、私は最大intより小さいRAND_MAXを見たことがないと言いました。私はあなたが正しいと思うが、私はそれが非常に最悪の場合であると仮定しようとしている。 –
srand
を一度だけとし、rand
で乱数を取得する必要があります。 rand
関数は、0からある定数までの数値を返します。RAND_MAX
;結果を目的の範囲にマッピングするのはあなたの責任です。これを行う伝統的な方法は、モジュラス演算子を使用することです。この演算子は、整数除算の結果得られる余りを返します。たとえば、7つの異なる結果が必要な場合は、rand() % 7
をとり、結果は(0,1,2,3,4,5,6)のいずれかになります。 Andrew Whiteの例のように、結果の望ましい範囲を作成するためにオフセットを追加します。
srand
が一度だけ呼び出されるようにする最も簡単な方法は、main()の先頭またはその近くで行うことです。
詳細については、これらの機能のマニュアルを参照してください。
GNU Cは、標準には存在しないいくつかの拡張機能(他の関数のスコープ内で関数を定義する機能など)を提供するCの方言です。 – dreamlax
私は訂正しました。それに応じて編集(そのビットを削除)。どこかに実際の仕様があるのですか、GCCコンパイラの拡張機能によって定義されていますか? –
'int rand(){return 4;}' –
@Anon:http://www.xkcd.com/221/ – SLaks