首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斐波那契移位寄存器伪随机数发生器

斐波那契移位寄存器伪随机数发生器
EN

Stack Overflow用户
提问于 2015-11-03 20:37:58
回答 1查看 383关注 0票数 0

我正在尝试让下面的代码在斐波那契移位寄存器上工作,以生成伪随机数。似乎不能让它工作,那么()有什么明显的问题(?)

代码语言:javascript
复制
Shared Function Main() As Integer
    Dim start_state As UShort = &HACE1UI ' Any nonzero start state will work.
    Dim lfsr As UShort = start_state
    Dim bit As UInteger
    Dim period As UInteger = 0

    Do While lfsr <> start_state
        ' taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1 
        bit = ((lfsr >> 0) Xor (lfsr >> 2) Xor (lfsr >> 3) Xor (lfsr >> 5)) And 1
        lfsr = (lfsr >> 1) Or (bit << 15)
        period += 1
    Loop 

    Return 0
End Function

最后,"period“是否需要除以一个大整数才能得到U(0,1)?

以下是原始的C++代码:

代码语言:javascript
复制
# include <stdint.h>
int main(void)
{
    uint16_t start_state = 0xACE1u;  /* Any nonzero start state will work. */
    uint16_t lfsr = start_state;
    uint16_t bit;                    /* Must be 16bit to allow bit<<15 later in the code */
    unsigned period = 0;

    do
    {
        /* taps: 16 14 13 11; feedback polynomial: x^16 + x^14 + x^13 + x^11 + 1 */
        bit  = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 5) ) & 1;
        lfsr =  (lfsr >> 1) | (bit << 15);
        ++period;
    } while (lfsr != start_state);

    return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2015-11-04 15:25:06

就像@dummy的评论一样,

代码语言:javascript
复制
Do While lfsr <> start_state
...
Loop

不会运行,因为一开始就是lfsr = start_state

相当于C++的代码

代码语言:javascript
复制
do {
...
} while (lfsr != start_state);

在VB.NET中是

代码语言:javascript
复制
Do
...
Loop While lfsr <> start_state
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33499354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档