Tag: 随机

如何从随机数发生器返回中间位?

我有一个random_rand()函数,它产生一个介于0和RANDOM_RAND_MAX之间的随机数。 RANDOM_RAND_MAX定义为65535。 我想使用random_rand()结果的中间位而不是最低位,以便我可以更好地进行随机化。 你能告诉我一个快速的方法吗? 谢谢

C或Python中的双峰分布

根据C或Python中的双峰分布生成随机值的最简单方法是什么? 我可以实现类似Ziggurat算法或Box-Muller变换的东西,但如果有一个现成的库,或者一个我不知道的简单算法,那就更好了。

在使每个索引具有与任何索引相同的概率的同时对数组进行混洗

我想改组一个数组,并且每个索引都有相同的概率在任何其他索引中(不包括它自己)。 我有这个解决方案,只有我发现总是最后2个索引总是相互交换: void Shuffle(int arr[]. size_t n) { int newIndx = 0; int i = 0; for(; i > n – 2; ++i) { newIndx = rand() % (n – 1); if (newIndx >= i) { ++newIndx; } swap(i, newIndx, arr); } } 但最终可能会有一些指数再次回到第一位。 有什么想法吗? C lang。

如何在C 中实现rand()/ srand()函数

可能重复: rand()如何工作? 它有一定的倾向吗? 有没有比这更好用的东西? 我知道如何实现它。 但是,我想了解rand在内部是如何表现的,为什么有必要初始化rand函数的’seed’值。 或者说 – rand函数如何使用种子值生成随机数?

如何使用C中的函数生成随机数组

我试图将程序从Matlab移植到C,以便改善执行时间和内存使用。 由于C中没有生成0和1统一填充数组的函数(或者我找不到它们),因此我创建了一个函数来相应地填充相关概率的数组。 示例 :如果概率为0.3(30%),我希望有一个包含100个元素的数组,随机填充零和1 ,并且数组的总和必须接近30。 而不是100我使用N =试验数,所以如果N = 10000那么数组之和应该接近3000,等等。 Matlab中的function只是: function [y] = rand_gen(N,Prob) for i=1:N y(i,1) = binornd(1,Prob); end end 该函数将被称为: array = rand_gen(N, Probability); 现在,这是C中的问题:当我运行程序时,我可以生成一些数组,但最大试验次数(N)非常低,我不认为它是内存问题。 如果我运行N = 100000的程序一切正常,但在100000(和其他东西)崩溃后。 C中的程序是: #include #include #include int * rand_gen(int N, double Prob); // Function declaration int sum_array(int a[], int num_elements); // Function declaration int main() // Main […]

生成唯一的随机数,除了C中的特定随机数

我想知道,除了特定的随机数之外,我怎么能生成独特的随机数。 例如,如果我想生成范围1 to 10 except from 3数字, 1 to 10 except from 3 ,输出应该是这样的: 7 6 1 2 4 9 5 8 10

C随机数生成(纯C代码,无库或函数)

我需要在C中生成一些随机数来测试和调试系统。 该系统是一个定制硬件(SoC),具有有限的function集,因此我只能使用基本的数学运算。 不,我不能在stdlib或math.h中使用随机数生成器。 我需要自己写。 那么是否有某种生成随机数的算法? 我知道一个简单的解决方案是在我的工作站上生成数字并将它们嵌入到模块中,但我不想这样做。

使用引擎进行随机数生成

我正在尝试使用OpenSSL的RAND_bytes API,但我想尝试使用各种随机数生成引擎。 是否有推荐的方法在OpenSSL中生成随机字节并添加熵? 我在哪里可以获得其他Engine实现,以及如何交换它们?

最简单的随机数发生器没有C库?

我需要在Cortex M0 CPU固件中添加一些随机化。 随机性并不重要,但速度是。 我测试了我在网上发现的两个function。 使用random()我设法每31个时钟周期生成1个数字,而random_uint()在20个周期内生成1个数字。 我的目标是小于10.我可以使用其他function吗? unsigned random() { unsigned b; b = t1 ^ (t1 >> 2) ^ (t1 >> 6) ^ (t1 >> 7); t1 = (t1 >> 1) | (~b << 31); b = (t2 << 1) ^ (t2 << 2) ^ (t1 << 3) ^ (t2 << 4); t2 = […]

C中的random(int)和randomize()

我想在给定范围内生成伪随机整数,而不引入因使用rand()%N而产生的偏差。 我已经阅读了函数random()和randomize() ,它们似乎替代了rand()和srand()函数,但直接返回了作为random()函数的参数给出的范围内的整数。 在这两种情况下,函数似乎都在stdlib.h库中。 我遇到的问题是我无法以某种方式使这些function起作用。 这是我测试函数的一个小测试代码。 #include #include int main(){ randomize(); printf(“%d\n”,random(100)); return 0; } 在使用gcc -o test test.c编译时,它会出错 test.c: In function ‘main’: test.c:6: error: too many arguments to function ‘random’ 据我所知,函数random()只接受一个参数,它是一个整数来确定给定数字的范围。 我究竟做错了什么? 编辑:似乎那些对应于一些TurboC旧事物。 那么现在的问题是,如何在它们没有倾斜的意义上制造“真正”的随机整数? 我的方法是(按照Vatine的建议) #include #include int main(){ srand(time(NULL)); printf(“%d\n”,rand()/(RAND_MAX/100)); return 0; } 这似乎产生了正确的结果。 这是否会增加一些偏差,或者结果至少等于该范围内任何数字的概率?