+ -
当前位置:首页 → 问答吧 → 怎么产生[0,42亿]的随机数???

怎么产生[0,42亿]的随机数???

时间:2011-12-08

来源:互联网

如题。。。。。。

作者: weiwuyuan   发布时间: 2011-12-08

unsigned long _Rm = _RANDOM_MAX;
unsigned long _Rn = _CSTD rand() & _RANDOM_MAX;
for (; _Rm < _Index && _Rm != ~0UL;
_Rm = _Rm << _RANDOM_BITS | _RANDOM_MAX)
_Rn = _Rn << _RANDOM_BITS
| (_CSTD rand() & _RANDOM_MAX); // build random valueC/C++ code





作者: mingliang1212   发布时间: 2011-12-08

C/C++ code


unsigned long _Rm = _RANDOM_MAX;
unsigned long _Rn = rand() & _RANDOM_MAX;
for (; _Rm < _Index && _Rm != ~0UL;
_Rm = _Rm << _RANDOM_BITS | _RANDOM_MAX)
_Rn = _Rn << _RANDOM_BITS
| ( rand() & _RANDOM_MAX); // build random value



作者: mingliang1212   发布时间: 2011-12-08

引用 1 楼 mingliang1212 的回复:
unsigned long _Rm = _RANDOM_MAX;
unsigned long _Rn = _CSTD rand() &amp; _RANDOM_MAX;
for (; _Rm < _Index &amp;&amp; _Rm != ~0UL;
_Rm = _Rm << _RANDOM_BITS | _RANDOM_MAX)
_Rn = _Rn << _RANDOM_BITS
……


这代码用不了。

作者: weiwuyuan   发布时间: 2011-12-08

引用 2 楼 mingliang1212 的回复:
C/C++ code



unsigned long _Rm = _RANDOM_MAX;
unsigned long _Rn = rand() &amp; _RANDOM_MAX;
for (; _Rm < _Index &amp;&amp; _Rm != ~0UL;
_Rm = _Rm << _RANDOM_BITS | _RANDOM_MAX)
_Rn = _Rn << _……


找不到宏,用不了呢。

作者: weiwuyuan   发布时间: 2011-12-08

引用 3 楼 weiwuyuan 的回复:
引用 1 楼 mingliang1212 的回复:
unsigned long _Rm = _RANDOM_MAX;
unsigned long _Rn = _CSTD rand() &amp;amp; _RANDOM_MAX;
for (; _Rm < _Index &amp;amp;&amp;amp; _Rm != ~0UL;
_Rm = _Rm << _RANDOM_BITS | _……


哪个常量用不了?

作者: mingliang1212   发布时间: 2011-12-08

引用 5 楼 mingliang1212 的回复:
引用 3 楼 weiwuyuan 的回复:
引用 1 楼 mingliang1212 的回复:
unsigned long _Rm = _RANDOM_MAX;
unsigned long _Rn = _CSTD rand() &amp;amp;amp; _RANDOM_MAX;
for (; _Rm < _Index &amp;amp;amp;&amp;amp;amp; _Rm != ~……


都用不了。你包含了什么文件??

作者: weiwuyuan   发布时间: 2011-12-08

C/C++ code

class random_base
{
public:
    typedef unsigned int IntType;
    typedef IntType result_type;
    typedef IntType argument_type;
    enum{ RANDOM_MAX = 0x7fffffff,RANDOM_BIT = 31 };
    random_base()
        :m_seed(0)
    {}
    random_base(IntType seed)
        :m_seed(seed)
    {}
    
    result_type operator()() {        
        m_seed = m_seed * 214013L + 2531011L;
        IntType high_bits = m_seed & 0x7fff0000;
        m_seed = m_seed * 214013L + 2531011L;
        return high_bits | (m_seed >>16);
    }
    
    result_type operator()(IntType max){
        return (*this)() % max;
    }
    void set_seed(IntType seed){
        m_seed = seed;
    };
    
private:
    IntType m_seed;
};







那么就用这个我写的吧》。
用法如下:

random_base random(随机种子);
int a = random();//这样生成随机数

作者: mingliang1212   发布时间: 2011-12-08

还有一种用法就是:

int i = random(1000000);//生成 0 - 1000000之间的随机数。 最大随机数是 2 ^ 32 (大于40亿)。

作者: mingliang1212   发布时间: 2011-12-08

引用 7 楼 mingliang1212 的回复:
C/C++ code


class random_base
{
public:
typedef unsigned int IntType;
typedef IntType result_type;
typedef IntType argument_type;
enum{ RANDOM_MAX = 0x7fffffff,RANDOM_BIT = 3……


能写个函数么?这点小东西用类有点不划算吧。

作者: weiwuyuan   发布时间: 2011-12-08

0-42亿不就是4字节int的范围么……

意思就是让你产生随机的int,这时候最好别用srand和rand,用CryptoAPI吧

作者: jackyjkchen   发布时间: 2011-12-08

引用 8 楼 mingliang1212 的回复:
还有一种用法就是:

int i = random(1000000);//生成 0 - 1000000之间的随机数。 最大随机数是 2 ^ 32 (大于40亿)。


我改了一下,您看这样子行么:?
C/C++ code

unsigned int MyRand()
{
    static unsigned int seed = (unsigned int)time(NULL);
    seed = seed * 214013L + 2531011L;
    unsigned int high_bits = seed & 0xffff0000;
    seed = seed * 214013L + 2531011L;
    return high_bits | (seed >>16);
}

作者: weiwuyuan   发布时间: 2011-12-08

C/C++ code



    enum{ RANDOM_MAX = 0xffffffff,RANDOM_BIT = 32 };
    
    static unsigned long m_seed;
    
    unsigned long mrand(){        
        m_seed = m_seed * 214013L + 2531011L;
        unsigned long high_bits = m_seed & 0xffff0000;
        m_seed = m_seed * 214013L + 2531011L;
        return high_bits | (m_seed >>16);
    }
    
    void set_seed(unsigned long seed){
        m_seed = seed;
    };
    



之前的代码只能生成 0- 2 ^31 这么大的,这个可以到 2^32

作者: mingliang1212   发布时间: 2011-12-08

引用 11 楼 weiwuyuan 的回复:
引用 8 楼 mingliang1212 的回复:
还有一种用法就是:

int i = random(1000000);//生成 0 - 1000000之间的随机数。 最大随机数是 2 ^ 32 (大于40亿)。


我改了一下,您看这样子行么:?

C/C++ code

unsigned int MyRand()
{
static unsigned it s……


嗯,如果在32位的机器上。

作者: mingliang1212   发布时间: 2011-12-08

恩,多谢了。。

作者: weiwuyuan   发布时间: 2011-12-08

热门下载

更多