如果有一样的把它舍掉,重新生成一个
 如果这样做,那么不能保证相隔的随机数是不一样的,只能保证相邻的不一样
 我也这么想过,可是怕效率会受影响
 刚才我贴的连接介绍的那本书中就有,绝对是最好的
 是吗,能达到微秒级的吗
 产生m到n的随机数,n>m randnum = rand() %(n-m+1)+m 
 问题不在这里 
 设置不同种子,m-n如果不重复,只有n-m+1个
 没用,现在需要微秒级的,而且取模这个函数使得重复的几率更大了
 同一时间段内产生的是一样的,现在需要微秒级的,而且取模这个函数使得重复的几率更大了

解决方案 »

  1.   

    rand()和seed()函数一起用不是很好吗?
      

  2.   

    拿系统当前日期时间作为种子。
    一些涵数被包过,请改为相应系统涵数。#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 );
    }
      

  3.   


        srand( (unsigned)time( NULL ) );    //随机数计时开始
        然后调用
        GetRand(float MIN, float MAX)
        {
            float max;
            max=RAND_MAX;
            return (int)(rand()*(MAX-MIN)/max+MIN);
        }
        其中MIN,MAX为你要求的随机数的上下限 
      

  4.   

    用函数random_shuffle msdn上有例子
      

  5.   

    我用过的伪随机数生成办法:使用散列算法(如MD5等),对系统毫秒数,鼠标位置等数据进行计算。
    根据散列算法的特性,重复的几率很小!MD5的代码到处都有,我也可以寄给你一份!
      

  6.   

    ”用时间做种子“我估计你们用的重复率都不低,用OpenSSL源码中的方法,你可以摘录其中几个文件,它获取屏幕状态,。多个条件,生成随即数。不信你自己去整
      

  7.   

    到MSDN里查UuidCreate(),共有2^128个不同的数,别指望能取到两个相同的。就借用一下吧。