Tag: 随机

rand()在OSX上是否会返回零?

我已经运行这个代码差不多十个小时没有爱情: while ( true ) { int r = rand(); assert( r != 0 ); } 我希望rand()最终滚零,从而触发断言。 我做错了什么或rand()永远不会返回零? 或者我没有等待足够长的时间来期待看到它? 我是2012年复古的2GHz i7。

随机数发生器的实现

可能重复: 随机数发生器如何工作? 我正在寻找C / C ++中随机数生成器的内部实现。基本上我很想知道调用rand()时究竟发生了什么。 在所有机器遵循一套明确的指令后,它怎么可能是随机的! 编辑:想知道如何在C / C ++中实现一个。

如何在C中得到伪随机均匀分布的整数足以进行统计模拟?

我正在编写蒙特卡罗模拟,并且需要大量随机位来生成均匀分布在{1,2,…,N}上的整数,其中N <40。 使用C rand函数的问题是我使用标准rand % N技术浪费了很多非常好的位。 生成整数的更好方法是什么? 我不需要加密安全随机数,但我不希望它们扭曲我的结果。 另外,我不考虑从random.org下载一批比特解决方案。

((float)rand()/(float)的含义((1 << 31) – 1))

我正在尝试理解一个包含.h文件的C程序 #define random ((float) rand() / (float)((1 << 31) – 1)) C程序还包括 。 我的猜测是,这只是在区间[0,1]上从均匀分布产生一个随机数; 它是否正确?

如何在c中为给定的均值和方差生成高斯伪随机数?

我这里有一个代码,它产生的平均0f 1和std偏差为0.5的随机数。 但是我如何修改这个代码,以便我能够确定任何给定均值和方差的高斯随机数? #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif double drand() /* uniform distribution, (0..1] */ { return (rand()+1.0)/(RAND_MAX+1.0); } double random_normal() /* normal distribution, centered on 0, std dev 1 */ { return sqrt(-2*log(drand())) * cos(2*M_PI*drand()); } int main() { int i; double rands[1000]; for (i=0; i<1000; i++) rands[i] = 1.0 + […]

随机数和多个srand调用

我正在编写一个程序,它将在循环中生成大量随机数。 我试图使这些数字更难以预测(不仅是为了安全,而是为了避免multithreading上的冲突)。 我注意到许多文档建议在程序中只调用一次srand 。 例如: C中的随机数 ,选择的答案是“作为一般规则,只在程序中调用一次srand()”。 但为什么? 做这样的事情为什么会这么糟糕: int THIS_THREAD_SEED; int randomness() { ++THIS_THREAD_SEED; int i; for(i=0 i<1000; i++) { unsigned n = rand_r(&THIS_THREAD_SEED) / RAND_MAX; /* do something with n */ } return 0; } int do_something() { int i; for(i=0; i<1000; i++) { randomness(); } } 因此,每个函数调用一次更改种子,而不是每个程序一次。 这样,无论有多少线程在运行,没有两个线程都会有相同的随机数列表……对吗? 更新假设我为每个线程都有一个唯一的种子,或者在全局SEED上使用互斥锁来防止竞争条件。

使用一个罕见数字生成两个数字之间的随机数

我可以用c生成两个数字之间的随机数。 arc4random()%(high-low+1)+low; 那么现在我的要求是……我想做一个罕见的数字….这意味着如果 高= 5,低= 1,稀有= 3, 超过3将很少出现1,2,4和5 … 谢谢

在C中随机播放一个int数组 – 没有while循环

我想要对一个整数数组进行随机排序,数组已经排序,其大小为n,值为1 – n。 我只是想避免使用while循环以确保rand()不会给我相同的索引。 代码看起来像这样的somthin: void shuffleArr(int* arr, size_t n) { int newIndx = 0; int i = 0; for(; i < n – 1; ++i) { while((newIndx = i + rand() % (n – i)) == i); swap(i, newIndx, arr); } } for循环一直持续到n-1,因此例如在最后一次运行中它有50/50的机会等于i。 我想避免这个想法。

寻找体面质量的PRNG只有32位状态

我正在尝试实现rand_r接口的可容忍质量版本,该接口具有令人遗憾的接口要求,即其整个状态存储在unsigned类型的单个对象中,对于我的目的而言,这意味着正好是32位。 另外,我需要它的输出范围是[0,2³¹-1] 。 标准解决方案是使用LCG并丢弃低位(具有最短周期),但这仍然为接下来的几位留下非常差的周期。 我最初的想法是使用LCG的两次或三次迭代来生成输出的高/低或高/中/低位。 但是,这种方法不能保持无偏差的分布; 而不是每个输出值具有相同的频率,许多输出多次出现,而有些则根本不发生。 由于只有32位状态,PRNG的周期以2 32为界,并且为了没有偏置,PRNG必须输出每个值,如果它具有完整周期则恰好输出两次,如果它具有周期2 3,则必须输出一次。 较短的时期不能没有偏见。 是否有任何知名的PRNG算法符合这些标准?

C编程中的rand()问题?

可能重复: 为什么我总是使用rand()得到相同的随机数序列? 所以,是的,这可能看起来有点小说,但是因为我在Java上变得合理后自学C,我已经遇到了一些麻烦。 我正在尝试在C中使用rand()函数,但我只能调用一次,当它执行时,它总是生成相同的随机数,即41.我正在使用Microsoft Visual C ++ 2010 Express,并且我已经设置它以便编译C代码,但唯一不起作用的是这个rand()函数。 我尝试过包含一些常用的库,但没有任何作用。 这是代码: #include “stdafx.h” #include “stdio.h” #include “conio.h” #include “stdlib.h” int main(void) { printf(“%d”, rand()); //Always prints 41 return 0; }