随机抽样java_实现随机抽样【随机数生成问题】
1、rand()
定義:
int rand(void);
返回值:返回一個(gè)偽隨機(jī)數(shù),該數(shù)的范圍是:[0,RAND_MAX)
2、srand()
定義:
void srand(unsigned intseed);
返回值:該函數(shù)是隨機(jī)數(shù)發(fā)生器的初始化函數(shù);如果使用相同的種子給rand用,那么rand()會產(chǎn)生相同的偽隨機(jī)數(shù)。常用的用法如下:
(1) srand((unsigned)time(&t));(2) srand((unsigned)time(NULL));這兩個(gè)都是用當(dāng)前時(shí)間去初始化種子;
(3) srand((int)getpid());使用程序的PID來作種子,那么在這個(gè)程序運(yùn)行時(shí)種子固定那個(gè)。
3、實(shí)戰(zhàn)經(jīng)驗(yàn)
(1)使用math.h中的函數(shù)floor時(shí)報(bào)如下錯(cuò)誤,經(jīng)查是沒有指定鏈接庫。使用gcc -o randint randint.c -lm即可
(2)采用下面這個(gè)例子,生成隨機(jī)數(shù),如果個(gè)數(shù)多了,偶爾會有重復(fù)的值
#include
#include
#include
#define NUMBER_MAX 100
int main(int argc,char* argv[])
{
int num[NUMBER_MAX];
int i;
FILE *rand_num_file = fopen("rand_num_file.txt","w+");
srand((unsigned)time(NULL));
for( i=0; i<100; i++)
{
num[i] = rand()%900 + 100;
fprintf(rand_num_file,"%d\n",num[i]);
}
return 0;
}
(3)Makefile的學(xué)習(xí)刻不容緩,十一之后來了主攻《git權(quán)威指南》和《shell編程學(xué)習(xí)指南》
(4)按照網(wǎng)上的一種解法,實(shí)現(xiàn)randint和bigrand:用rand實(shí)現(xiàn)bigrand和randint
仍然會有重復(fù)的數(shù)值,那么我們怎么解決這個(gè)問題呢?我們要的是100~999之間的任意100個(gè)隨機(jī)數(shù),要求不能重復(fù)!
#include
#include
#include
#include
#define NUMBER_MAX 100
int randint(int l, int u);
int main(int argc,char* argv[])
{
int num[NUMBER_MAX];
int i;
FILE *rand_num_file = fopen("rand_num_file.txt","w+");
srand((unsigned)time(NULL));
for( i=0; i<100; i++)
{
//num[i] = rand()%900 + 100;//生成[100,999)之間的隨機(jī)數(shù)
num[i] = randint(100,1000);
fprintf(rand_num_file,"%d\n",num[i]);
}
return 0;
}
//實(shí)現(xiàn)randint(l,u),返回[l,u]范圍內(nèi)的一個(gè)隨機(jī)整數(shù)
int randint(int l,int u)
{
int temp;
temp = floor(l + (1.0*rand()/RAND_MAX)*(u - l + 1 ));
return temp;
}
補(bǔ)上:
今天看到用java語言生成隨機(jī)數(shù),有這么一個(gè)想法,也能滿足我們的要求:生成[n,m]之間的k個(gè)不重復(fù)的隨機(jī)數(shù)。參見:點(diǎn)擊打開鏈接
總結(jié)
以上是生活随笔為你收集整理的随机抽样java_实现随机抽样【随机数生成问题】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 界面优美的linux,Ubuntu 11
- 下一篇: c语言一串大写字母转小写,C语言的基础函