|
Unofficial "CLDC 1.0 + MIDP 1.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.util.Random
public class Random
48 ビットのシードと線形合同擬似乱数アルゴリズムを使用して擬似乱数を生成します。 この擬似乱数の生成についての詳細は Donald Knuth 著“The Art of Computer Programming, Volume 2”の 3.2.1 に記載されています。
同じ値をシードとして生成されたインスタンスに対して、それぞれ同じメソッドを同じ順序で呼び出して乱数を取得した場合、それぞれのインスタンスはまったく同じ値を返します。
この法則を保証するため、固有のアルゴリズムを Random
クラスは実装しています。
Java コードの絶対的な移植性を確保するため、全ての実装(実装)は、この Random
クラスの実装に際して同様のアルゴリズムを採用しなければなりません。
アプリケーションにおいて Random
クラスのサブクラスを作成する場合、next(int)
メソッドをオーバーライドして独自のアルゴリズムを実装することもできます。
コンストラクタの概要 | |
---|---|
Random()
現在の日時をシードに持つオブジェクトを構築します。 |
|
Random(long seed)
渡されたシードを持つオブジェクトを構築します。 |
メソッドの概要 | |
---|---|
protected int |
next(int bitlen)
指定されたビット長の擬似乱数を生成します。 |
int |
nextInt()
next(int) メソッドを呼び出して、int 型の擬似乱数を返します。 |
long |
nextLong()
next(int) メソッドを呼び出して、long 型の擬似乱数を返します。 |
void |
setSeed(long seed)
渡された long 型の値をシードとして設定します。 |
クラス java.lang.Object から継承されたメソッド |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public Random()
public Random(long seed)
seed
- 設定するシード値を渡します。setSeed(long)
メソッドの詳細 |
---|
public void setSeed(long seed)
渡された long
型の値をシードとして設定します。
このメソッドの一般規約ではパラメータ seed
を使用してシードを作成した状態となるように、保持しているシードを変更します。
実際の Random
クラスでの実装は、
public synchronized void setSeed(long seed) { this.seed = (seed ^ 0x5deece66dl) & 0xffffffffffffl; }
とされています。このように使用するビット数は48ビットに制限しています。
サブクラスを作成し、このメソッドをオーバーライドすることによってシード値として渡された64ビット全ての有効とするように変更することも可能です。
seed
- 設定するシード値を渡します。protected int next(int bitlen)
指定されたビット長の擬似乱数を生成します。 このメソッドは他の乱数生成メソッドから内部的に呼び出されます。 標準で実装されている以外のアルゴリズムで乱数を生成する場合は、サブクラスでこのメソッドをオーバーライドします。
このメソッドの一般規約では1〜32(これには1と32を含む)ビットの間の擬似乱数を生成し、int
型で返します。
結果として生成される個々のビットは必要十分に均等に近く0あるいは1が選択されます。
実際の Random
クラスでの実装は、
protected synchronized int next(int bitlen) { seed = (seed * 0x5deece66dl + 0x0bl) & & 0xffffffffffffl; return (int) (seed >>> (48 - bitlen); }
とされています。
これは D.H.Lehmer によって定義された、線形合同擬似乱数アルゴリズムを使用したものです。 アルゴリズムの詳細については Donald Knuth 著“The Art of Computer Programming, Volume 2: Seminumerical Algorithms”の 3.2.1 に記載されています。
public int nextInt()
next(int)
メソッドを呼び出して、int
型の擬似乱数を返します。
生成される値はほぼ均等な確率で int
値の範囲内に分散した値となります。
実際の Random
クラスでの実装は、
public int nextInt() { return next(32); }
とされています。
public long nextLong()
next(int)
メソッドを呼び出して、long
型の擬似乱数を返します。
生成される値はほぼ均等な確率で long
値の範囲内に分散した値となります。
実際の Random
クラスでの実装は、
public long nextLong() { return ((long) next(32) << 32) + next(32); }
とされています。
|
Unofficial "CLDC 1.0 + MIDP 1.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |