如果有一样的把它舍掉,重新生成一个
如果这样做,那么不能保证相隔的随机数是不一样的,只能保证相邻的不一样
我也这么想过,可是怕效率会受影响
刚才我贴的连接介绍的那本书中就有,绝对是最好的
是吗,能达到微秒级的吗
产生m到n的随机数,n>m randnum = rand() %(n-m+1)+m
问题不在这里
设置不同种子,m-n如果不重复,只有n-m+1个
没用,现在需要微秒级的,而且取模这个函数使得重复的几率更大了
同一时间段内产生的是一样的,现在需要微秒级的,而且取模这个函数使得重复的几率更大了
如果这样做,那么不能保证相隔的随机数是不一样的,只能保证相邻的不一样
我也这么想过,可是怕效率会受影响
刚才我贴的连接介绍的那本书中就有,绝对是最好的
是吗,能达到微秒级的吗
产生m到n的随机数,n>m randnum = rand() %(n-m+1)+m
问题不在这里
设置不同种子,m-n如果不重复,只有n-m+1个
没用,现在需要微秒级的,而且取模这个函数使得重复的几率更大了
同一时间段内产生的是一样的,现在需要微秒级的,而且取模这个函数使得重复的几率更大了
一些涵数被包过,请改为相应系统涵数。#define RAND_MULTIPLIER 0x015a4e35L
#define RAND_INCREMENT 1unsiged long __dwSeedvoid _RandSeedInit( void );
U16 __Random( U16 wNum );void _RandSeedInit( void )
{
DateTimeType DateTime; __RtcGetSystemDateTime( &DateTime );//get system's data and time
//change the date and time to seconds
__dwSeed = __RtcDateToSeconds( &DateTime );
}U16 RD_Rand( void )
{
__dwSeed = RAND_MULTIPLIER * __dwSeed + RAND_INCREMENT;
return ( ( U16 ) ( __dwSeed >> 16 ) & 0x7fff );
}U16 __Random( U16 wNum )
{
U16 wResult; wResult = RD_Rand(); return ( wResult % wNum );
}
srand( (unsigned)time( NULL ) ); //随机数计时开始
然后调用
GetRand(float MIN, float MAX)
{
float max;
max=RAND_MAX;
return (int)(rand()*(MAX-MIN)/max+MIN);
}
其中MIN,MAX为你要求的随机数的上下限
根据散列算法的特性,重复的几率很小!MD5的代码到处都有,我也可以寄给你一份!