C++里面这样随机生成数啊

AHigher 2003-10-17 10:58:39
C++里面怎么样随机生成数啊
包括int double 型的
...全文
294 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mechgoukiteng 2003-10-18
  • 打赏
  • 举报
回复
boost库中有随机数库,可以参考


当然,可以参照os的时间片算法写
19830711 2003-10-18
  • 打赏
  • 举报
回复
rand()%100
RookieStar 2003-10-18
  • 打赏
  • 举报
回复
一般都采用伪随机数的方法。伪随机数是由种子决定的数列。
一般的公式是 Xn = ( a * Xn-1 + c ) % m
很显然,一旦 Xo 确定,Xn 都确定了。这就是伪随机数本质。

举个例子:
#include<time.h>
const unsigned long maxshort=65536L;
const unsigned long multiplier=1194211693L;
const unsigned long adder=12345L;

class RandomNumber
{
private:
unsigned long randSeed;
public:
RandomNumber(unsigned long s=0){if (s==0) randSeed=time(0);else randSeed=s;}
unsigned short Random(unsigned long n); //产生0~n-1的随机整数
double fRandom(void); //产生0~1.0的随机实数
};

unsigned short RandomNumber::Random(unsigned long n)
{
randSeed=multiplier*randSeed+adder;
return (unsigned short)((randSeed>>16)%n);
}

double RandomNumber::fRandom(void)
{
return Random(maxshort)/double(maxshort);
}

注意Random()函数中的这句:randSeed=multiplier*randSeed+adder;(对照上面的公式)
通过每次迭代用常量产生新的种子,再将32位值randSeed的高16位右移就产生[0,65535]间整数,再由n取模即得[0,n-1]
chenyubang 2003-10-18
  • 打赏
  • 举报
回复
其实计算机要生成一个随机数对于她本身是件复杂的事

对于编程人员生成一个完善的随机数也不是件容易得事

简单随机数求法:
int num=自己定数值;
randomize();
random(num),随机生成0~num之间的数字.
jhyu 2003-10-17
  • 打赏
  • 举报
回复
楼上的,多次执行用同样的随机数序列 在某些场合有意义。比如加密解密
各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。
Liulingbing 2003-10-17
  • 打赏
  • 举报
回复
楼上说的很全了,不过我觉得srand函数恐怕不是最好先用,是必须用吧。
有谁的程序会只用一次呢,多次执行用同样的随机数序列有什么随机的意义呢。
srand可以给随机数生成算法植入种子,time(0)可以给它赋一个独一无二的时间值。
jhyu 2003-10-17
  • 打赏
  • 举报
回复
使用rand函数获得随机数。rand函数返回的随机数在0-RAND_MAX(32767)之间。
例子:
/* RAND.C: This program seeds the random-number generator
* with the time, then displays 10 random integers.
*/

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i;

/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );

/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}
在调用这个函数前,最好先调用srand函数,如srand( (unsigned)time( NULL ) ),这样可以每次产生的随机数序列不同。
如果要实现类似Turbo C的random函数,可以如下:
int random(int number)
{
return (int)(number/(float)RAND_MAX * rand());
}
如果要实现类似0-1之间的函数,可以如下:
double randf()
{
return (double)(rand()/(double)RAND_MAX);
}
pxwzd123 2003-10-17
  • 打赏
  • 举报
回复
自己写一个啊,调用rand()函数,

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧