我正在尝试创建一个包含 32 位和 16 位随机数的长 (= 2^31) 列表。对于 32 位,我使用rand() 实现中的 lfsr113_Bits(),但我不确定获得 16 位数字的质量序列的最佳方法是什么。
不幸的是,rand() 中包含的内容有点短,因为根据文档:“rand 函数返回 0 到 RAND_MAX (32767) 范围内的伪随机整数。
我正在考虑使用 lfsr113_Bits() 和联合来获取 16 位数字,方法是:
union {
uint16 i16[2];
uint32 i32;
} u;
u.i32 = lfsr113_Bits();
然后使用来自 u.i16[0] 或 u.i16[1] 的数字,或者可能来自两者的数字,一个接一个,但我有一种直觉,以这种方式获得的序列可能比通过使用本机 16 位生成器。
关于生成 16 位随机数的最佳方法的任何想法?