我需要一个MS Word VB A中的代码,我有一个位序列为10110001110000111 ....我感兴趣的是如何生成随机位序列假设首先生成第四位为1然后下一个如果我需要3位生成三个随机位为1 0 1,因此如果需要四位,则生成四个随机位为1001.完成所有操作后,如果再次运行,可以再次生成位序列。
答案 0 :(得分:0)
使用CRC。不太熟悉VBA,但如果你使用例如CRC32,那么你可以生成一个好的伪随机比特流。
你需要对所谓的多项式做出很好的选择,但是如果你使用众所周知的,那么结果非常好。
这被编码为C而不是VBA,对不起,但是从内存VBA可以使相关的运营商可用。
int nextbit( void )
{
uint32_t seed = 1;
seed = (seed&0x80000000? 0x04c11db7 : 0) ^ (seed<<1);
return seed&1;
}
或
int nextbit( void )
{
uint32_t seed = 1;
seed = (seed&1? 0x82608EDB : 0) ^ (seed>>1);
return seed&1;
}
哪,信不信由你都是相同的多项式。只是进入不同的方向 - 完整的多项式需要添加2 ^ 32,这通常被认为是多余的。这里使用的多项式是CRC-CCITT 32位,用于校验和数据。
第二个可能更好,因为第一个将在它开始之前以32 0开始。
将种子初始化为您想要的任何值,并仔细选择多项式将保证它在重复之前具有2 ^ 32个周期。