随机数一

简介: 随机数一
#include <iostream>
#include <map>
using namespace std ;
#include <time.h>
#include <math.h>
//C语言的库函数rand有以下两个可改进之处
//范围太小,才3万多,改成40亿多
//需要srand,如果不srand 默认只是1。CRand默认值是clock()。注意:Windows下GetTickCount更精确
#define ULONG unsigned long
//接口
class IRand
{
public:
    //不实现SetSeed防止多次SetSeed引起种子值相同。构造函数中初始化种子
    virtual ULONG Rand()=0;
};
class CRand : public IRand
{
public:
    CRand(ULONG s1 = clock(),ULONG s2 = time(NULL) )
    {
        m_iSeed1 = s1 ;
        m_iSeed2 = s2 ;
    }
    ULONG Rand()
    {
        ULONG b;
        b = m_iSeed1 ^ (m_iSeed1 >> 2) ^ (m_iSeed1 >> 6) ^ (m_iSeed1 >> 7);
        m_iSeed1 = (m_iSeed1 >> 1) | (~b << 31);
        b = (m_iSeed2 << 1) ^ (m_iSeed2 << 2) ^ (m_iSeed1 << 3) ^ (m_iSeed2 << 4);
        m_iSeed2 = (m_iSeed2 << 1) | (~b >> 31);
        return m_iSeed1 ^ m_iSeed2;
    }
protected:
    ULONG m_iSeed1;
    ULONG m_iSeed2;
};
void main()
{
    const int n = 100;
    CRand r ;
    for( int i = 0 ; i < n ; i++ )
    {
        cout << r.Rand() << endl ;
    }
}
相关文章
|
6月前
|
算法 编译器 C语言
生成随机数
C语言中的`rand()`函数生成0-RAND_MAX间的伪随机数,需包含`stdlib.h`。序列重复因默认种子为1,可使用`srand(unsigned int seed)`初始化,通常结合`time(NULL)`设置种子以产生不同序列。`time()`函数从1970年至今的秒数(时间戳),包含于`time.h`,用于提供变化的种子。通过`rand() % b + a`可调整生成指定范围[a, b]内的随机数。
103 3
|
C++
【C++操作手册】C++生成指定范围内随机数rand(随机数种子)
【C++操作手册】C++生成指定范围内随机数rand(随机数种子)
705 0
|
C++
如何在C++中生成随机数
在C++中,生成随机数是一个常见的技术需求。本文将介绍如何在C++中使用标准库来生成随机数。
197 0
随机数,函数
1.随机一个1-10之间的小数
79 0
Random生成伪随机数
Random生成伪随机数
81 0
|
JavaScript
[随机数详解]生成一个随机数,生成指定范围的随机数及随机数组去重
写在前面: 很早之前在简书写过几篇关于随机数的文章之前写的很乱,现在重新整理一下这些知识点。本文包含了如下这些知识点:js生成随机数,生成指定范围的随机数,获得不重复随机数组。 js生成随机数。 Math.random()——生成大于等于0.0且小于1.0的一个随机数; 通常我们生成随机数都是使用这个方法,这个方法返回值是一个伪随机选择的数,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,在该范围内(近似)均匀分布。
732 0
[随机数详解]生成一个随机数,生成指定范围的随机数及随机数组去重