相关函数    #include <QtGlobal>

qsrand(unsigned seed);
qrand();

以上函数产生的随机数为伪随机数。之所以称为伪随机数,有以下两点原因:

1:qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间

(RAND_MAX == 32767)。如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。

2:之所以称为伪随机数,因为种子的值相同的情况下,函数运行两次产生的随机序列一致。

注意:qrand()函数产生的是一个随机序列,只不过每次只返回一个值。举例如下:

#include <QTime>
#include <QtGlobal>
#include <QDebug> void generateAscendRandomNumber()
{
int i;
QList<int> numbersList;
qsrand();
for(i=;i<;i++)
{
numbersList.append(qrand()%);
}
qSort(numbersList.begin(),numbersList.end());
for(i=;i<;i++)
{
qDebug()<<numbersList[i];
}
} int main()
{
generateAscendRandomNumber() ;
}

以上输出为:1  2  2  2  4  6  6  7  9(实际会换行)

多次运行程序发现输出结果是一致的。因为种子不变的情况下,qrand()运行多次产生的随机序列一致。

结论:种子相同,每一个随机序列内的每一个数都是随机的,但是随机序列之间却不是随机的。

为了获得不同的随机序列,可以使用当前时间作为种子,来进行模拟随机数。因为时间是不断变化的,即种子的值也是不同的,所以产生的随机序列也是不同的。

qsrand(QTime(,,).secsTo(QTime::currentTime()))

int QTime::secsTo ( const QTime & t ) const

函数返回这个时间到t的秒数(如果t早于这个时间,返回的为负数)。因为QTime只能度量一天之内的时间,而且一天内只有86400秒,

所以结果就应该在-86400秒和86400秒之间。

实际上QTime(0,0,0).secsTo(QTime::currentTime())返回的值就是从0到QTime::currentTime()的值。

最新文章

  1. 理解callback function in javascript
  2. string.join(iterable)
  3. 时间管理的若干Tips
  4. Java提高篇(三四)-----fail-fast机制
  5. ArcSoft&#39;s Office Rearrangement---hdu5933
  6. UIActionSheet
  7. ios中图片的绘画和截图
  8. Romantic(裸扩展欧几里德)
  9. Http方式获取网络数据
  10. 使用awk截取某时间段的日志
  11. R中基本统计图
  12. iBatis基础知识
  13. Sqoop执行mysql删除语句
  14. 【从零开始自制CPU之学习篇03】锁存器与触发器
  15. 多AG自动生成apk说明
  16. Leetcode 20.有效的括号 By Python
  17. hihocoder-1407 后缀数组二&#183;重复旋律2 不重合 最少重复K次
  18. 构造方法调用另一个构造方法,用this
  19. libpcap 库使用(三)
  20. MySQL连接、登录、密码等

热门文章

  1. HDU 4635 Strongly connected (Tarjan+一点数学分析)
  2. 用MyEclipse JPA创建项目(三)
  3. memcached集群安装与测试
  4. tp 缓存,前台提速
  5. tp5中捕获异常的配置
  6. Redis在.net中的应用学习
  7. c语言基础:数据类型 分类: iOS学习 c语言基础 2015-06-10 21:43 9人阅读 评论(0) 收藏
  8. GTK安装
  9. Linux删除Screen
  10. cloneNode