2016-12-04 534 views
-2

我想实现机能的研究产生随机二进制数,使用以下:如何在C++中生成随机二进制数字?

srand(time(NULL)); 
int S = rand() % 2;//continuous random variable between 0 and 1 

然后:

rand()%2; 

不断叫2^20倍......然而 即时通讯没有得到适当的随机数字..任何改进建议?

是否有二进制数字或eqv的数据类型? (而不是声明一个整数)

另外,我见过的srand种子的唯一实现是时间(NULL)或时间(0),有没有办法操纵种子以获得更好的随机数?

+1

您可能希望将标签的“C++”或“c”添加到你的问题,因为我认为这就是你的代码在。 –

+0

你认为什么是“正确的随机数”?你得到什么样的结果? – JJJ

+1

使用'rand()%2;'只挑选刚生成的随机数的低位。一些PRNG会以低位产生模式,这可能是导致问题的原因。通过使用像'if(rand()%10000> = 5000)...'这样的更好的方法避免了这个问题,它使用PRNG输出的更多位。 – rossum

回答

-1

二进制数字只是不同基数中的数字。如果您只是生成整数(基数为10),然后在输出时将其转换为二进制,则不存在任何问题。

检查这个问题的详细信息上一个整数转换为“二进制”字符串: C++ - Decimal to binary converting

+0

这是不正确的,因为依赖于正在使用的PRNG。许多PRNG在整数级表现得足够好,但在各个位上性能很差。特别是,rand()的许多实现(最后一次没有确切的说法)都知道低位的性能很差。 – pjs

+0

不知道,思想数字总是一样的。尽管如此,看看你的意思! –