修改
由于很多人不知道我在问什么,所以我已经改写了这个问题。
extern unsigned short lfsr();
int foo[65536];
for (int i = 0; i < 65536; i++)
foo[lfsr()] = 1;
// every element of foo has been set to 1.
我想要lfsr()
的源代码,它返回一个伪随机16位值,0到65535.如果调用65536次,它将返回0到65535之间的每个数字一次,没有重复。如果你再次这样做,它将返回相同的序列。不是一个很好的随机数生成器,但它有它的用途。
我曾经在1984年左右的Dr. Dobbs Journal of Computer Calisthenics和Orthodontia获得了这个代码。
这似乎与噪声发生器非常相似,但例外是循环重复并且不适用于音频。渲染相同的64K 16位PCM采样将在48 kHz的不到1.5秒内显着重复,而且我从未听说过16位噪声发生器。
注意: 一个洗牌方法在1984年不会起作用,因为阵列需要128K,这将是Apple [或类似计算机]可用内存的两倍以上。
答案: 感谢Jesper Juhl和Jim Mischel将其识别为LFSR,线性反馈移位寄存器以及在哪里找到原始文章。
对不起,原来的问题很糟糕,感谢你的时间。