cc [ flag ... ] file ... -lsunmath -lm [ library ... ] #include <sunmath.h>
void i_shufrans_(int *x, int *n, int *l, int *u);
void u_shufrans_(unsigned *x, int *n, unsigned *l, unsigned*u);
void r_shufrans_(float *x, int *n, float *l, float *u);
void d_shufrans_(double *x, int *n, double *l, double *u);
这些函数将随机数 x[0]、...、x[*n-1] 置乱到位。这些数可以由任何方法生成,但假定为在间隔 [*l,*u] 上均匀分布。(如果有任何数位于此间隔之外,则结果无法确定。)
这些例程使用 Knuth 所说的“算法 B”方法。它们使用一个内部表,该表包含 4 到 256 个元素,具体由 *n 确定。
要置乱 1000 个 [lb, ub] 范围内的双精度随机数:
double x[1000], lb, ub; int n = 1000; d_shufrans_(x, &n, &lb, &ub);
有关下列属性的说明,请参见 attributes(5):
|
addrans(3M)、drand48(3C)、lcrans(3M)、mwcrans(3M)、rand(3C)、random(3C)、attributes(5)
Knuth 编著的《Seminumerical Algorithms》,Addison-Wesley 出版,1981。
Park 和 Miller 合著的《Random Number Generators: Good Ones are Hard to Find》,Communications of the ACM 出版,1988 年 10 月。