HERD--位运算

2018-03-08 14:34:39 浏览数 (1)

判断一个数是否是2的次方

代码语言:javascript复制
1 static inline int hrd_is_power_of_2(uint32_t n)
2 {
3       return n && !( n & (n - 1 ));  
4 }

快速随机数

代码语言:javascript复制
static inline uint32_t hrd_fastrand(uint64_t *seed)
{
     *seed=*seed * 1103515245   12345;
      return (uint32_t)(*seed >> 32);
}

一般种子数seed会取系统时间的模来作为参数,同样的时间种子会产生同样的序列,每次产生随机数的时间间隔相差不大的话,产生的随机数序列的第一个数值往往也相差不大,对于一些要求严格的场合不太适用。

所以为了使每次产生随机数的差别较大,随机性效果好,可以增加相邻两次产生随机数的时间间隔,比如用系统毫秒和微妙时间取一次模然后作为时间种子。

既适用于多线程多进程也适用于频繁调用随机数函数,可以得到各不相同的随机数序列。

0 人点赞