| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1174 人关注过本帖
标题:为什么每次启动程序,RND取得的随机数都是一样的呢??
只看楼主 加入收藏
121038
Rank: 1
等 级:新手上路
威 望:2
帖 子:414
专家分:0
注 册:2005-8-3
收藏
 问题点数:0 回复次数:6 
为什么每次启动程序,RND取得的随机数都是一样的呢??
RT
搜索更多相关主题的帖子: 随机数 RND 
2007-02-13 20:45
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
使用Randomize

我的msn: myfend@
2007-02-13 20:58
121038
Rank: 1
等 级:新手上路
威 望:2
帖 子:414
专家分:0
注 册:2005-8-3
收藏
得分:0 
我用过了Randomize,但每次启动还是一样的,真是令人费解

2007-02-13 21:28
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
在用Rnd之前用一下Randomize,我的没有问题,你的,我就不知道了.

我的msn: myfend@
2007-02-13 21:45
清澂居士
Rank: 6Rank: 6
等 级:贵宾
威 望:28
帖 子:1237
专家分:7
注 册:2006-12-19
收藏
得分:0 
提供一个随机数发生器的类,比rand()函数产生的随机数好(重复周期长),有興趣的話可以用在VB裏麵```

// Random.h

class CRandom
{

public:
CRandom();
CRandom::CRandom(LPCSTR strKey){RandShuffle(strKey);}

virtual ~CRandom();

void RandShuffle(const CString strKey); //初始化
double RandReal(double x,double y);
double RandNormal(double mean,double stddev);
int RandInteger(int a,int b);
double RandFrac(void);
double RandExponential(double mean);
long Rand(void);
private:
long m_nDataList[100];
};


//------------------------------------------------------------------------
//Random.cpp

#include "stdafx.h"
#include "Random.h"
#include <math.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CRandom::CRandom()
{

}


CRandom::~CRandom()
{

}


void CRandom::RandShuffle(const CString strKey)
{
CString key = "Abra Ca Da Bra" + strKey + CString(' ',83);
key = key.Left(97);

int i; char c;

for(i = 0; i <97; i++){
c = key.GetAt(i);
m_nDataList[i] =c * 8171717 + i +997;
}

key ="";

i = 96;
int j = 11;

for(int k = 0; k < 997; k++){
m_nDataList[i] = m_nDataList[i] - m_nDataList[j];
if(m_nDataList[i] < 0) m_nDataList[i]+=1000000000;
if(i>0){
i -= 1;
}
else{
i = 96;
}
if(j >0){
j -= 1;
}
else{
j = 96;
}
}

m_nDataList[97] = 55;
m_nDataList[98] = 24;

m_nDataList[99] = 77;
}


long CRandom::Rand()
{
long i = m_nDataList[97];
long j = m_nDataList[98];

int t = m_nDataList[i] - m_nDataList[j];
if(t <0) t+=1000000000;
m_nDataList[i] = t;

if(i>0)
m_nDataList[97] = i -1;
else
m_nDataList[97] = 54;

if(j>0)
m_nDataList[98] = j - 1;
else
m_nDataList[98] = 54;

i = m_nDataList[99] % 41 +55;
m_nDataList[99] = m_nDataList[i];
m_nDataList[i] = t;

return m_nDataList[99];

}


double CRandom::RandExponential(double mean)
{
return (-mean * log(RandFrac()));
}


double CRandom::RandFrac()
{
return (Rand() /1e9);
}


int CRandom::RandInteger(int a, int b)
{
ASSERT(a < b);
return (a + (Rand() % (b - a + 1)));
}


double CRandom::RandNormal(double mean, double stddev)
{
double u1 = RandFrac();
double u2 = RandFrac();
double x = sqrt(-2 * log(u1)) * cos(6.283185 * u2);
return (mean + stddev * x);

}


double CRandom::RandReal(double x, double y)
{
return (x + (y-x) * Rand() / 1e9);
}

佛曰:\"前世的500次回眸才换来今生的一次擦肩而过\".我宁愿用来世的一次擦肩而过来换得今生的500次回眸.
2007-02-13 22:34
121038
Rank: 1
等 级:新手上路
威 望:2
帖 子:414
专家分:0
注 册:2005-8-3
收藏
得分:0 
谢谢purana,好了,很奇怪,昨天我用了这个的还是一样

2007-02-14 09:56
雏鹰展
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-2-14
收藏
得分:0 
好像是一个 随机种子之类的函数吧,都要忘完了

记得第一次用这个的时候好像这作一个,返回当前时间(随机颜色的)一个东西

现在大要钱要忘了
2007-02-14 18:40
快速回复:为什么每次启动程序,RND取得的随机数都是一样的呢??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035153 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved