[英]How can i generate random numbers between 5 and 40000 in C?
我尝试使用 rand() function 生成 5 到 40000 之间的随机数。并将它们添加到 3x3 矩阵中。 我试过用 rand 乘以 rand 和 mod 39996 你认为是正确的解决方案吗?
这是代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
srand(time(0));
int **matris;
matris=(int **)calloc(3,sizeof(int)); // ilk pointerla 3 kutuya boldum yani 3 satir
for(int i=0;i<3;i++){
matris[i]=calloc(3,sizeof(int)); // buradada 3 kutunun herbirinin icini 3e boldum
}
for(int i=0;i<3;i++){ // i= matrisin satirini j= matrisin sutununu temsil ediyor
for(int j=0;j<3;j++){
matris[i][j]= 5 + ((rand()*rand())%39996); // burada rand() fonksiyonunun karesini alip isleme devam ettim. 5 ile 40000 arasi sayilar olusturuyor.
}
}
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
printf("%d\t",matris[i][j]);
}
printf("\n");
}
return 0;
}
当RAND_MAX
很大时,以下就足够了,尽管它有偏差。
matris[i][j] = 5 + (rand() % 39996);
由于RAND_MAX
可能只有 32767(显然在OP 的情况下),我们需要更多的随机位。
if (RAND_MAX == 32767) {
long r = rand();
r *= (RAND_MAX + 1L);
r += rand();
matris[i][j] = 5 + (r % 39996);
} else {
matris[i][j] = 5 + (rand() % 39996);
}
rand()*rand()
不形成均匀分布。 在这种情况下,我们需要(RAND_MAX+1)*(RAND_MAX+1)
不同的值。
生成的随机数范围至少需要为 [0...39996)。
https://www.geeksforgeeks.org/generating-random-number-range-c/
由于 C 没有内置的 function 用于生成该范围内的数字,但它确实有 rand function 从 RAND_MAX 0 生成随机数。 在rand()
的帮助下,可以生成范围内的数字num = (rand() % (upper – lower + 1)) + lower
如果您不担心偏见 (*)
randomvalue = rand() % 39996 + 5;
*某些值被选中的概率高于其他值*
RAND_MAX
是 32767
嗯……
调用rand()
两次并使用其中一个值中的一位
// return unbiased random between 5 and 40000
// assuming RAND_MAX == 32767
int unbiased(void) {
int value;
do {
value = rand(); // 0 to 32767
value = value * 2; // even value from 0 to 65534
if (rand() & 0x800) value = value + 1; // 0 to 65535
} while (value > 39995); // ignore biased results
return value + 5;
}
int random(int min, int max) {
return (rand() % (max - min + 1)) + min;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.