Tag: random

避免蒙特卡罗模拟中的基本rand()偏差?

我正在用C语言重写C中的蒙特卡罗模拟,以便在VBA / Excel的dll中使用。 计算中的“引擎”是创建0到10001之间的随机数,并与5000-7000邻域中的变量进行比较。 每次迭代使用4-800次,我使用100000次迭代。 因此,每次运行大约有50.000.000代随机数。 在Objective C中,测试表明没有偏见,我对C代码有很大的问题。 Objective C是C的超集,因此95%的代码都是复制粘贴,很难搞砸。 我昨天和今天整天经历了很多次,我没有发现任何问题。 我使用srand()留下了arc4random_uniform()和rand()之间的区别,特别是因为偏向0到10000的较低数字。我所进行的测试与.5的偏差是一致的。对于大约5000以下的数字,2%。任何其他解释是我的代码避免重复,我想它不会。 代码非常简单(“spiller1evne”和“spiller2evne”是5500到6500之间的数字): srand((unsigned)time(NULL)); for (j=0;j<antala;++j){ [..] for (i=1;i<450;i++){ chance = (rand() % 10001); [..] if (grey==1) { if (chance < spiller1evnea) vinder = 1; else vinder = 2; } else{ if (chance < spiller2evnea) vinder = 2; else vinder = 1; } 现在我不需要真正的随机性,伪随机性非常好。 我只需要在累积的基础上近似均匀分布(如果5555的可能性是5556的两倍并不重要。如果5500-5599的可能性为5600-5699并且可能性为5如果有明显的0.5-2%偏向0-4000而不是6000-9999。 […]

未定义的引用`log’

我正在尝试编译Donald Eastlake的RFC 3797随机选择算法的实现(代码: http : //kambing.ui.ac.id/minix/other/rfc3797/ )。 但是,我收到链接器错误: rfc3797.c:(.text+0xe7f): undefined reference to `log’ 我试图用提供的Makefile来实现它,它明确地链接到数学图书馆,但我仍然得到错误: cc -lm -o randomselection rfc3797.c MD5.c 我该如何编译这个程序?

为什么C ++ stdlib rand()函数为跨平台的相同种子提供不同的值?

我知道rand()函数根据它给出的种子生成伪随机数,并且在给定的平台上它总是从同一个种子生成相同的数字序列,我想知道它为什么给出跨平台使用相同库的不同序列? 即如何实现rand() ?

生成随机n字节Base64字符串后的不可打印字符

我试图使用openssl生成一个32byte base64字符串,但它并不总是产生32字节字符串,有时输出是乱码并且没有正确显示 #include #include #include #include #include #include #include int Base64Encode(const unsigned char* buffer, unsigned char** b64text) { //Encodes a binary safe base 64 string BIO *bio, *b64; BUF_MEM *bufferPtr; b64 = BIO_new(BIO_f_base64()); bio = BIO_new(BIO_s_mem()); bio = BIO_push(b64, bio); BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); //Ignore newlines – write everything in one line BIO_write(bio, buffer, strlen(buffer)); BIO_flush(bio); BIO_get_mem_ptr(bio, […]

在C / C ++中获取大的随机数

标准rand()函数给出的数字对我来说不够大:我需要unsigned long long 。 我们如何获得非常大的随机数? 我尝试修改一个简单的哈希函数,但它太大了 ,运行时间太长,从不产生小于1e5的数字!!