C语言中随机二进制数的生成
我需要随机生成位,但是位的数量应该是一个确定的比率。 假设我想生成一个100位的。 所以如果比例是3:2 它必须生成60秒和40秒。C语言中随机二进制数的生成,c,random,binary,C,Random,Binary,我需要随机生成位,但是位的数量应该是一个确定的比率。 假设我想生成一个100位的。 所以如果比例是3:2 它必须生成60秒和40秒。 我怎样才能在C语言中实现这一点呢?假设你想要一个概率为p的1,其中p是双在包含范围[0.0,1.0]内 然后您可以使用下面的rand\u bit()逻辑 #include <stdio.h> #include <stdlib.h> int rand_bit(double p){ if(p==1.0){//Unusual but O
我怎样才能在C语言中实现这一点呢?假设你想要一个概率为
p
的1,其中p
是双在包含范围[0.0,1.0]内
然后您可以使用下面的rand\u bit()
逻辑
#include <stdio.h>
#include <stdlib.h>
int rand_bit(double p){
if(p==1.0){//Unusual but OK exact comparison of double.
return 1;
}
double r=((double)rand())/((double)RAND_MAX);
return r<p?1:0;
}
//Demonstration...
int main(void) {
srand(78721);//Demonstration is reproducible....
const int test=1000000;
int count=0;
double p=0.6;//60% 1s.
for(int i=1;i<=test;++i){
count+=rand_bit(p);
}
double prop=((double)count)/((double)test);
printf("%f (error=%f)\n",prop,(prop-p));
return 0;
}
请记住使用srand()
为随机数生成器设定种子。如上所述,传入一个固定值以获得可再现的结果或srand((int)time(NULL))代码>以获得不同的运行结果
还要注意的是,C语言中内置的随机数生成器通常不是很好。
它们通常适用于游戏,也适用于为业务应用程序生成测试用例,但通常不适用于科学模拟和密码学上毫无价值的测试
条件if(p==1.0)
存在,因此我们可以确保p==1.0
始终返回1<代码>p==0.0
通过查看函数来确定。可能类似于int operation=if(rand()>rand_MAX/proportion)代码>?“确定比例”是什么意思?均匀分布,0和1的精确相等,或50/50?…以外的比例,但以确定的比例。。。到底是什么意思?你的意思是你想要一个生成0和1的二进制数(你没有指定的数字)的函数,并且该函数的输入是它们中有多少%需要是1?还是别的什么?此外,您应该描述到目前为止您为解决此问题所做的努力。本网站不是让人们免费为你工作的地方。:)每个C实现都提供了srand()
和rand()
函数。在一些C实现中,rand()
结果的低位在0
和1
之间交替,使得rand()%2
不合适。大多数C实现提供了比srand()
和rand()
更高质量的其他随机数生成器。看问题13.15和下面的。我指的是比率。很抱歉因此,如果比率为3:2,假设计数为100,则需要生成60个0和40个1,0的数量必须始终大于1的数量。这将有助于提供有关种子设定或使用不需要种子设定的CSPRNG的信息。@zaph我添加了关于srand()
的进一步注释。该应用程序似乎与加密无关。它似乎正在测试一个业务应用程序,在这种情况下,rand()
就可以了。
0.600500 (error=0.000500)