Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

3.6.4 乱数の機能

32 ビット整数、単精度浮動小数点、および倍精度浮動小数点形式の均一擬似乱数を生成するための機能には、次の 3 つがあります。

  • addrans(3m) のマニュアルページで説明されている関数は、テーブル駆動加法的乱数ジェネレータのファミリに基づいています。

  • lcrans(3m) のマニュアルページで説明されている関数は、線形合同乱数ジェネレータに基づいています。

  • mwcrans(3m) のマニュアルページで説明されている関数は、キャリー付き乗算乱数ジェネレータに基づいています。また、これらの関数には、64 ビット整数形式の均一擬似乱数を提供するジェネレータも含まれています。

さらに、shufrans(3m) のマニュアルページで説明されている関数をこれらのいずれかのジェネレータと組み合わせて使用すると、擬似乱数の配列をシャッフルすることによってさらに高いランダム性を、それを必要とするアプリケーションに提供できます。64 ビット整数の配列をシャッフルするための機能はないことに注意してください。

各乱数機能には、1 回につき 1 つ (つまり、1 回の関数呼び出しで 1 つ) の乱数を生成するルーチンのほか、1 回の呼び出しで乱数の配列を生成するルーチンが含まれています。1 回につき 1 つの乱数を生成する関数は、Table 3–17 に示されている範囲内の数値を提供します。

表 3-17  1 回につき 1 つ値の乱数ジェネレータの間隔
関数
下限
上限
i_addran_
-2147483648
2147483647
r_addran_
0
0.9999999403953552246
d_addran_
0
0.9999999999999998890
i_lcran_
1
2147483646
r_lcran_
4.656612873077392578E-10
1
d_lcran_
4.656612875245796923E-10
0.9999999995343387127
i_mwcran_
0
2147483647
u_mwcran_
0
4294967295
i_llmwcran_
0
9223372036854775807
u_llmwcran_
0
18446744073709551615
r_mwcran_
0
0.9999999403953552246
d_mwcran_
0
0.9999999999999998890

1 回の呼び出しで乱数の配列全体を生成する関数では、ユーザーは生成される数値の間隔を指定できます。Appendix A, 例には、異なる間隔にわたって均一に分布された乱数の配列を生成する方法を示すいくつかの例が紹介されています。

addrans および mwcrans ジェネレータは一般に lcrans ジェネレータより効率的ですが、それらの理論はまだそれほど洗練されていません。『Random Number Generators: Good Ones Are Hard To Find』(S. Park 氏、K. Miller 氏共著、Communications of the ACM、1988 年 10 月) は、線形合同アルゴリズムの理論的な特性について説明しています。加法的乱数ジェネレータは、Knuth 氏の『The Art of Computer Programming』の第 2 巻で説明されています。