设置cad不联网:VC6怎么产生随机数??

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 15:04:06
我的程序是这样!可是结果显示只有0.00..
请教如何修改一下啊!
void CTestRandDlg::OnTestrand()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);

CString str;

str.Format("%.2f");

p_StaticWnd = GetDlgItem(IDC_STATIC);
p_StaticWnd->SetWindowText(str);

UpdateData(FALSE);

}
/////////////////////////////////////////////////////////////

float Rand( float flMin, float flMax )
{

int iRandomInt = Rand( (int)flMin, (int)flMax );
float flResult = iRandomInt + (float)( Rand(0,99) * 0.01 ) * ( iRandomInt > -1 ? 1 : -1 );

if( flResult > flMax ) flResult = flMax;
else if( flResult < flMin ) flResult = flMin;

return flResult;
}

说实话,没看明白你的程序想做什么,前一个函数并没有调后一个函数啊。没法替你写。但我想把原理讲清楚恐怕比替你写出来更有好处。
简单的说,C++里随机数就靠两个库函数:rand()和srand(), 只需#include <stdlib.h>就可以在自己的程序中调用。
rand()生成伪随机数,srand()为它生成随机数种子。最简单的例子是不设种子(就是总用默认的种子):
#include <cstdlib>
#include <iostream>
using std::cout;
using std::endl;

int main()
{

for (int i = 0; i < 5; i++) {
cout << rand() << endl;
}

return 0;
}
这里调用了rand()5次,每次生成的数都不一样,但把程序再运行一遍,产生的序列跟上次一样。这就是“伪随机”的含义:种子不变,随机数其实是固定的。
要想让计算机生成一些不固定的,真正随机的东西,就只有靠取系统时间了。下面这个程序用时间设随机数种子,可以得到真正的随机:
#include <cstdlib>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;

int main()
{

// Set evil seed (initial seed)
srand( (unsigned)time( NULL ) );

for (int i = 0; i < 5; i++) {
cout << rand() << endl;
}

return 0;
}

rand()只是在0到RAND_MAX之间按均匀分布生成随机数,想要得到其他区间内的随机数,或者得到其他分布的随机数(如正泰分布),就需要自己在rand()返回的结果上再进行运算了。比如下面这个程序把[0, RAND_MAX] 区间的整数映射到[0, 1]区间的浮点数:
#include <cstdlib>
#include <ctime>
#include <iostream>
using std::cout;
using std::endl;

int main()
{

float x;

// Set evil seed (initial seed)
srand( (unsigned)time( NULL ) );

for (int i = 0; i < 5; i++) {
x = (float) rand()/RAND_MAX;
cout << x << endl;
}

return 0;
}

详细的讲解和更多例子可以参考
http://cplus.about.com/od/advancedtutorials/l/aa041303a.htm
以及MSDN上rand和srand的document.

有用的话要加分哦:)

在BOSS中修改。

我建议你恢复默认值 修改很危险

试一下这个:rand()
z在stdlib.h中

c++有自待的库函数实现了此功能,好像是 random(),要求是用随机因子,随机因子(好像是这个名字)