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程序設計有所幫助。