rand源码
⑴ 关于c语言中的rand()
rand()是产生一个随机数,所以整句地意思就是将产生的随机数与
limit
/
(RAND_MAX
+
1)
相乘并将结果强制转换为长整形
在
+
1
⑵ C语言中rand函数的原理问题,高手快来~
系统里的随机数是利用初等数论中的同余定理来实现的.
产生整数rand的原理是:
y=ax+b(mod n)其中,n一般是一个很大的素数,几万。
a也是大素数。而且a,b,n都是常数。所以rand的产生决定于x,
他被称为seed。
每一个seed都是上一次产生的y的函数。这样,如果直接取seed=y的话,
虽然产生的rand之间相关性甚小,但只要知道某个y,就能推知以后的rand。
为避免这种情况,一般取seed为y和当时计算机的时间的函数,如seed=y+t
比如VC中对于rand()函数是如下实现的.
int __cdecl rand (void)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
⑶ 求random函数源代码,小弟十分想知道它是如何实现的……
混合同余法: 混合同余法是加同余法和乘同余法的混合形式,其迭代式如下: Xn+1=(Lamda*Xn+Miu)%M Rn+1=Xn/M 经前人研究表明,在M=2^q的条件下,参数lamda,miu,X0按如下选取,周期较大,概率统计特性好: Lamda=2^c+1,c取q/2附近的数 Miu=(1/2+sqrt(3))/M X0为任意非负整数 相应C程序关键代码段: //init proper argu number M=pow(2,32); Lamda=pow(2,16)+1; Miu=(0.5+sqrt(3)/6)/M; float MyRnd(){ Xn=fmod(Lamda*Xn+Miu,M); Rn=Xn/M; return Rn;}
⑷ C语言 编写程序利用rand()函数产生50个100以内的随机数,将其中的奇数写入当前目录下的"A.TXT"文件中
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i,j;
int x[50];
int n=50;
FILE *fp;
srand((unsigned)time(NULL));
// 用当前时间来产生随机数种子,这样每次用本程序产生的随机数序列 将不同,更随机。
for(i=0;i<n;i++) {
x[i] = rand() % 100; // 产生 0-99 之间的随机数,% 是整除 取余数 运算
}
fp=fopen("A.TXT","w"); //打开文件
for(i=0;i<n;i++) {
if (x[i]%2==1) fprintf(fp,"%d\n",x[i]); // 除2余数为1的是奇数,输出它
}
fclose(fp); //关闭文件
printf("the 50 rand numbers:\n");
for(i=0;i<n;i++) {printf("%2d ",x[i]); if ( (i+1)%10==0) printf("\n");} // 屏幕输出这50个随机数
printf("\nOdd rand numbers are saved in A.TXT\n");
return 0;
}
本文实例讲述了php源码分析之DZX1.5随机数函数random用法。分享给大家供大家参考。具体如下:
<?php
/**
*
@param
int
$length:
随机数长度
*
@param
int
$numeric:
0或非0,其中0表示随机数由全数字组成,非0表示随机数由全字母组成
*
@return
string:
返回生成的随机数
*/
function
random($length,
$numeric
=
0)
{
$seed
=
base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']),
16,
$numeric
?
10
:
35);
$seed
=
$numeric
?
(str_replace('0',
'',
$seed).'012340567890')
:
($seed.'zZ'.strtoupper($seed));
$hash
=
'';
$max
=
strlen($seed)
-
1;
for($i
=
0;
$i
<
$length;
$i++)
{
$hash
.=
$seed{mt_rand(0,
$max)};
}
return
$hash;
}
echo
random('15',1);
echo
'<br
/>';
echo
random('15');
/*End
of
php*/
运行结果如下:
228283270677112
SjqffsU76994qfS
希望本文所述对大家的php程序设计有所帮助。