【问题标题】:Generate Pseudo Random bits from a string in msword VBA从 msword VBA 中的字符串生成伪随机位
【发布时间】:2015-01-08 17:20:04
【问题描述】:

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

【问题讨论】:

  • 这很有趣,我有义务问what have you tried? 你也应该澄清一下你的问题。您要求的“随机”位实际上分别是 1011001

标签: vba random ms-word numbers


【解决方案1】:

使用 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 bit,用于校验和数据。

第二个可能更好,因为第一个会在开始之前以 32 0 开头。

将种子初始化为您想要的任何值,并且仔细选择多项式将保证它在重复之前有一个 2^32 循环。

【讨论】:

  • 0x82608EDB == (0x04c11db7 + 2^32)/2,所以多项式相同。
猜你喜欢
  • 2013-10-10
  • 1970-01-01
  • 2010-09-08
  • 2014-11-22
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
相关资源
最近更新 更多