目次→実行時ライブラリー参考→
数学関連→
RANDOMIZE←オリジナル・サイト
乱数発生器に、種をまきます。
構文:
用法:
Randomize [ seed ]
[, algorithm ]
パラメタ:
seed
乱数発生器の
double の種の値ですが、アルゴリズム #4(以下を参照) を除くすべてのアルゴリズムで小数部分が切り捨てされます。
省略すると、
Timer に基づく値が代わりに使われます。
algorithm
アルゴリズムを選択するための整数値 (使用可能なアルゴリズムについては、標準ヘッダー「fbprng.bi」を参照してください)。 省略すると、現在の
FreeBASIC の言語方言 のデフォルトのアルゴリズムが使用されます。
記述:
Randomize は、
Rnd が乱数を生成するために使う乱数の種を設定し、使用するアルゴリズムを選択します。
algorithm の定数は
fbprng.bi で定義されています。
-lang fb 方言では、これらの定数は
FB Namespace の一部です。
algorithm の有効な値は次のとおりです:
FB_RND_AUTO (0) - 現在の
FreeBASIC の方言 のデフォルトです。
FB_RND_CRT (1) -
C 実行時ライブラリの
rand() 関数を使います。これは、プラットフォームによって異なる結果が得られます。
FB_RND_FAST (2) - 高速実装を使います。これはすべてのプラットフォームで安定しており、32ビットの粒度と適度なランダム性を提供します。
FB_RND_MTWIST (3) - メルセンヌ・ツイスターを使います。これは、すべてのプラットフォームで安定しており、32ビットの粒度を提供し、高度な偶発性を提供します。
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF
FB_RND_QB (4) - QBASIC と同じ乱数シーケンスを与えるように設計された関数を使います。これはすべてのプラットフォームで安定しており、偶発性の程度は低く、24ビットの精度を提供します。
FB_RND_REAL (5) - Win32 と Linux で利用可能で、システム機能(Win32 Crypto API、Linux /dev/urandom)を使って暗号的にランダムな数値を提供します。これらのシステム API が使えない場合は、代わりに
FB_RND_MTWIST (3) アルゴリズムが使われます。
各アルゴリズムは、与えられた任意の種を使って、その種の特定で決定論的な数列を生成します。
異なった数列を生成するために、呼び出すたびに
Randomize したいなら、予測できない種を使う必要があります。たとえば、
Timer から返される値などです。
seed パラメータを省略すると、
Timer に基づく値が使われます。
注意:アルゴリズム #4 を除くすべてのアルゴリズムでは、シードの小数部分が切り取られるため、パラメーターとして
Timer 値を直接使うと、同じ秒間に複数回使うと同じシードが生成されます。
しかし、一般に、予測できない種子を使って二度
Randomize を呼ぶ価値は、ありません。2番目の連鎖は、最初ほど無作為にならず、数列の重複を誘発するからです。
ほとんどの場合、メルセンヌ・ツイスターは、
Rnd 呼び出しの間に再シードを必要とせずに、十分に無作為な数列を提供します。
QB 互換アルゴリズムを使って
Randomize を呼び出すと、古い種の一部が保持されます。
つまり、同じ種で何度も
Randomize を呼び出しても、毎回同じシーケンスになるわけではありません。
QB 互換モードで特定の連鎖を取得したいときは、
Rnd に負のパラメータを指定して種を設定します。
注意:
Randomize は (内部ミューテックスを使用することにより) スレッドセーフですが、スレッド固有ではありません。
他の乱数ジェネレーターの未完成の構造体も、標準ヘッダー "fbprng.bi" で利用できます。
例:
'' RNG の種を、C の rand() を使う方法にします
Randomize , 1
'' 乱数の系列を表示します
For i As Integer = 1 To 10
Print Rnd
Next
Sleep
フォーラムに掲示されていた使い方の注意です。
PC の稼働時間に依存しない設定例:
注意:シードを再度ランダム化する場合のようにシーケンスを繰り返したい場合以外は、シーケンスの重複を避けるために、Randomize を複数回使用しないでください。
バージョン:
方言差:
使用されるデフォルト・アルゴリズムは、現在使われている方言によります:
QBからの違い:
-
algorithm パラメタは、FreeBASICで新規作成。
-
QBASIC には、1つのアルゴリズムしかありませんでした。(これは、FB で、アルゴリズムNo. 4で模写します。そして、-lang qb 方言で、デフォルトとして 設定します)
参照:
ページ歴史:2022-04-14 02:12:23
日本語翻訳:WATANABE Makoto、原文著作者:SysOp