C++ piecewise_constant_distribution以及 gettimeofday()函数详解

320 阅读2分钟

这是我参与更文挑战的第2天,活动详情查看: 更文挑战

1. piecewise_constant_distribution分段常数分布随机数

piecewise_constant_distribution 模板定义了一个在一组分段子区间生成浮点值的分布。给定子区间内的值是均匀分布的,每个子区间都有自己的权重。n 个区间边界可以定义 n-1 个子区间和 n-1 个可以运用到子区间的权重,由这 n 个区间边界定义一个对象,图 1 说明了这一点。

图 1 中的分布定义了 3 个区间,每个都有自己的权重。这 3 个区间是由定义在容器 b 中的 4 个边界值定义的。每个区间都有一个由容器 w 中的元素定义的权重。它的前两个参数是指定边界序列的迭代器,第三个参数是指向权重序列的第一个元素的迭代器。每个区间内的值都是均勻分布的,特定区间内的随机值的概率是由这个区间的权重决定的。

截屏2021-05-12 下午4.36.06.png

除了所有分布都实现的成员函数之外,piecewise_constant_distribution 还有成员函数 intervals() 和 densities(),它们分别返回区间的边界和区间内值的概率密度;这两个函数返回的值都是 vector 容器。

2. gettimeofday()函数:获取当前时间

头文件:#include <sys/time.h> #include <unistd.h>

定义函数:int gettimeofday (struct timeval * tv, struct timezone * tz);

函数说明:gettimeofday()会把目前的时间有tv 所指的结构返回,当地时区的信息则放到tz 所指的结构中。

timeval 结构定义为:

struct timeval{
  long tv_sec;  //秒
  long tv_usec;  //微秒
};

timezone 结构定义为:

struct timezone
{
  int tz_minuteswest;  //和Greenwich 时间差了多少分钟
  int tz_dsttime;  //日光节约时间的状态
};
//获取当前时间
static double GetWallTime()
{
    struct timeval time;
    if (gettimeofday(&time,NULL)){
        //  Handle error
        return 0;
    }
    return (double)time.tv_sec + (double)time.tv_usec * .000001;
}

返回值:成功则返回0,失败返回-1,错误代码存于errno。