【分享代码】弥补c语言随机数不足
c语言吧
全部回复
仅看楼主
level 7
H_氢 楼主
c语言自带的随机数有很多弊病,而且现在我还没有搜到更好的方法,因此我在它的基础上进行改进(可以放在循环里,而且随机性强)大家要不要我分享出来。另外大家如果有更好的方法求指教
2014年12月27日 14点12分 1
level 13
[疑问]
2014年12月27日 19点12分 2
level 13
厉害啊!绝对厉害!!!
2014年12月28日 00点12分 4
level 7
H_氢 楼主
有没有人要啊
2014年12月28日 00点12分 5
level 11
直接贴出来就会有一大堆人来看了~
#chmod 777 / -R
2014年12月28日 01点12分 6
level 7
H_氢 楼主
// Rand 3
//10的poa次方
int poww(int poa)
{
int poi, gett = 1;
if (poa == 0)
return 1;
for (poi = 1; poi <= poa; poi++)
{
gett = 10 * gett;
}
return gett;
}
//字符串转数字
int cton(char snum[])
{
int rnnum, arrr;
char snumm[] = "0123456789";
int ctoni, ctonii;
for (ctoni = 0; ctoni <= strlen(snum) - 1; ctoni++)
for (ctonii = 0; ctonii <= strlen(snumm) - 1; ctonii++)
{
if (snum[ctoni] == snumm[ctonii])
{
arrr = ctonii * poww(strlen(snum) - ctoni - 1);
rnnum += arrr;
}
}
return rnnum;
}
//随机数表(外部函数可修改)
char randf[] =
"4685680458221
18454423354
674584094699778282
18029838452
72444424956688465640
13782034928
3465268154379264386928649572168296084328560286273427586222857645
18349546213
479756556258
18856458725
9469642482464646
15583592554
6525655882857080462
13588098104
22543892828456825
18349884899
4077531827428";
int isntfirst, nowh;
//随机函数
int randd(int min, int max)
{
char wait3[10];
srand((int)time(NULL));
int nowhh = rand() % strlen(randf) + 1;
if (!isntfirst)
{
no
2014年12月28日 01点12分 7
level 7
H_氢 楼主
if (!isntfirst)
{
nowh = nowhh;
isntfirst = 1;
}
// 从randf中选择三位数字
sprintf(&wait3, "%c%c%c", randf[nowh], randf[nowh + 1], randf[nowh + 2]);
nowh += 3;
if (nowh + 2 > strlen(randf))
nowh = nowhh;
srand((int)time(NULL) + cton(wait3));
return rand() % (max - min + 1) + min;
}
2014年12月28日 01点12分 8
level 11

2014年12月28日 01点12分 9
level 7
H_氢 楼主
代码写的粗俗不够灵活
2014年12月28日 01点12分 10
level 7
H_氢 楼主
希望大家继续修改
2014年12月28日 01点12分 11
level 7
H_氢 楼主
原理就是从随机数表中选3位数与时间数相加当成随机种子
2014年12月28日 01点12分 12
level 7
H_氢 楼主
由于c4droid上面许多现成的函数有问题,结果不对(或者不好用),而且我对许多现成的函数不了解,我就自己写了外加函数
2014年12月28日 01点12分 13
level 7
H_氢 楼主
如poww是算10的poa次方,考虑到随机数表字太多,所以用字符串储存,这就需要用到cton将其转为数字(我还不了解其他的函数能不能同样这样)
2014年12月28日 01点12分 14
level 7
H_氢 楼主
执行过程:如果是第一次,就随机任取随机数表中的一位;如果不是第一次,就依次向后读三位数与时间数相加。这样就可以避免循环函数执行太快,而且建议大家随机数要多写几行,这样基本上算是随机了
2014年12月28日 01点12分 15
level 7
H_氢 楼主
我知道这东西看的人比较少,毕竟现在有许多外部函数撑腰,但比如像c4droid,里面只能用原始的随机数,那又怎么办
2014年12月28日 01点12分 16
level 6
谢谢楼主,本渣渣需要一会儿才能看懂
2014年12月28日 01点12分 17
level 14
(⊙o⊙)哦,围观大神来的[乖][乖][乖]
2014年12月28日 01点12分 18
level 7
H_氢 楼主
没人
2014年12月28日 02点12分 19
(⊙o⊙)哦,围观大神来的
2014年12月28日 02点12分
level 7
H_氢 楼主

2014年12月28日 02点12分 20
level 11
效率怎么样?另外,随机性强的结论是怎么得来的?
2014年12月28日 03点12分 21
效率一般,比较我还没有涉及控制效率。通过实验验证,这个函数抽取的数据统计后计算频率与概率契合
2014年12月28日 04点12分
1 2 3 尾页