Oracle® Solaris Studio 12.4:数值计算指南

退出打印视图

更新时间: 2015 年 1 月
 
 

3.6.4 随机数工具

可以使用三种工具来生成 32 位整数、单精度浮点和双精度浮点格式的统一伪随机数:

  • addrans(3m) 手册页中描述的函数基于表驱动的加法随机数生成器系列。

  • lcrans(3m) 手册页中介绍的函数基于线性同余随机数生成器。

  • mwcrans(3m) 手册页中介绍的函数基于进位相乘的随机数生成器。这些函数还包括以 64 位整数格式提供统一伪随机数的生成器。

此外,shufrans(3m) 手册页中介绍的函数可与其中的任何生成器结合使用以混洗伪随机数的数组,因而为需要它的应用程序提供更大的随机性。注意,没有用于混洗 64 位整数数组的工具。

每个随机数工具都包含每次生成一个随机数(即每个函数调用一个随机数)的例程以及在单个调用中生成随机数数组的例程。每次生成一个随机数的函数提供的数字位于Table 3–17 所示的范围内。

表 3-17  单值随机数生成器的区间
函数
下界
上界
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

在单个调用中生成整个随机数数组的函数允许用户指定生成数所在的区间。Appendix A, 示例给出了一些示例,说明如何生成在不同区间中均匀分布的随机数数组。

注意,addransmwcrans 生成器通常比 lcrans 生成器更有效,但它们的理论基础还不足够精确。S. Park 和 K. Miller 于 1988 年 10 月在《Communications of the ACM》上发表的《Random Number Generators: Good Ones Are Hard To Find》介绍了线性同余算法的原理。Knuth 编著的《The Art of Computer Programming》第 2 卷中讨论了加法的随机数生成器。