从msword VBA中的字符串生成伪随机位

时间:2015-01-08 17:20:05

标签: vba random ms-word numbers

我需要一个MS Word VB A中的代码,我有一个位序列为10110001110000111 ....我感兴趣的是如何生成随机位序列假设首先生成第四位为1然后下一个如果我需要3位生成三个随机位为1 0 1,因此如果需要四位,则生成四个随机位为1001.完成所有操作后,如果再次运行,可以再次生成位序列。

1 个答案:

答案 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个周期。