gpt4 book ai didi

c++ - 使用 LFSR 生成随机掷骰子

转载 作者:行者123 更新时间:2023-11-28 07:30:49 25 4
gpt4 key购买 nike

我有使用从互联网上获得的左反馈移位寄存器生成随机数的代码:

#define POLY_MASK_32 0xB4BCD35C
#define POLY_MASK_31 0x7A5BC2E3

#include <iostream>

typedef unsigned int uint;

uint lfsr32, lfsr31;

int shift_lfsr(uint *lfsr, uint polymonial_mask)
{
int feedback;

feedback = *lfsr & 1;
*lfsr >>= 1;
if (feedback == 1)
*lfsr ^= polymonial_mask;
return *lfsr;
}

void init_lfsrs(void)
{
lfsr32 = 0xABCDE; //seed values
lfsr31 = 0x23456789;
}

int get_random(void)
{
/*this random number generator shifts the 32-bit LFSR twice before XORing
it with the 31-bit LFSR. the bottom 16 bits are used for the random number*/
shift_lfsr(&lfsr32, POLY_MASK_32);
return(shift_lfsr(&lfsr32, POLY_MASK_32) ^ shift_lfsr(&lfsr31, POLY_MASK_31));
}

void main(void)
{
int random_value[10];

init_lfsrs();
for(int i = 0; i < 10; i++)
{
random_value[i] = get_random();
std::cout << random_value[i] << std::endl;
}
}

我不太明白这里发生了什么,但我知道它会产生一个非重复序列的 32 位数字。我认为它需要前 16 位作为显示的数字。

我想做的是从中产生一个 1-6 之间的数字...有人能帮忙吗?

编辑 我还打算将 2 个种子值更改为 srand(time) rand() 数字,这样它就不会每次都以相同的方式开始。这样对吗?我该怎么做?

最佳答案

要生成 1 到 6 之间的随机数,请执行此操作

 int myRandomNumber = 1 + (random_value[i] % 6);

为什么会这样?

random_value[i] % 6

将产生一个介于 0 和 5 之间的值,因此我们将其加 1 以获得介于 1 和 6 之间的值。

阅读模运算符

http://www.cprogramming.com/tutorial/modulus.html

一般来说,要在某个闭集 [a, b] 中产生一个随机数,您会这样做

int myRandomNumber = a + ( random_value[i] % (b - a + 1) )

关于c++ - 使用 LFSR 生成随机掷骰子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com