判断一个数是否是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会取系统时间的模来作为参数,同样的时间种子会产生同样的序列,每次产生随机数的时间间隔相差不大的话,产生的随机数序列的第一个数值往往也相差不大,对于一些要求严格的场合不太适用。
所以为了使每次产生随机数的差别较大,随机性效果好,可以增加相邻两次产生随机数的时间间隔,比如用系统毫秒和微妙时间取一次模然后作为时间种子。
既适用于多线程多进程也适用于频繁调用随机数函数,可以得到各不相同的随机数序列。