C语言中随机二进制数的生成

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

我需要随机生成位,但是位的数量应该是一个确定的比率。 假设我想生成一个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 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)