使用clock() 函数来进行计时,时不时的返回一个很大的负数,怎么检查也检查不出错误,现在找出错误原因,给大家分享一下。

来源网页:http://kebe-jea.blogbus.com/logs/33603387.html

跑实验的时候,结果时不时出现统计时间是负数的问题……开始以为是逻辑错误,程序调了个底儿掉,没找到错误。今天突然意识到应该是计时出了问题,clock()返回的是长整数,加上linux下的CLOCKS_PER_SEC是1000000(Windows下这个数是1000,难怪原来用的时候没有发现问题),运行时间长了自然会越界,然后会滚回滚。

之后翻clock的帮助文档,发现里边写到

Note that the time can wrap around. On a 32-bit system where CLOCKS_PER_SEC equals 1000000 this function will return the same value approximately every 72 minutes.

我每次开始记录下clock()返回值,结束时记录下,做差,记录结果,难怪会出错,而且可重复性那么差,半个小时才重现一次错误。

发现了问题,接着就得找解决方法。找来找去(其中在碧海青天C版版主同学帮助下,顺便强烈感谢) 知道了用timeval结构体能解决问题。

timeval里边有俩成员,tv_sec 的单位是秒;tv_usec 的单位是 1 / CLOCKS_PER_SEC = 0.000001秒,记录时间的时候用gettimeofday函数,下面摘自man gettimeofday

#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);int settimeofday(const struct timeval *tv, const struct timezone *tz);Feature Test Macro Requirements for glibc (see feature_test_macros(7)):settimeofday(): _BSD_SOURCEDESCRIPTIONThe functions gettimeofday() and settimeofday() can get and set thetime as well as a timezone. The tv argument is a struct timeval (asspecified in <sys/time.h>):struct timeval {time_t tv_sec; /* seconds */suseconds_t tv_usec; /* microseconds */};and gives the number of seconds and microseconds since the Epoch (seetime(2)). The tz argument is a struct timezone:struct timezone {int tz_minuteswest; /* minutes west of Greenwich */int tz_dsttime; /* type of DST correction */};这样计算时差就很容易了,timeval tv, tv1;
gettimeofday(&tv, 0);
//blah blah
gettimeofday(&tv1, 0);
cout<<(tv1.tv_sec - tv.tv_sec + (double)(tv1.tv_usec - tv.tv_usec) / CLOCKS_PER_SEC)<<endl;

转贴地址:http://blog.csdn.net/panyuequn/article/details/5046223

转载于:https://www.cnblogs.com/wainiwann/p/4341993.html

clock函数返回负值~ (转)相关推荐

  1. clock函数返回精度都是上万的_Excel常用函数每日一讲 VLOOKUP函数

    我们都知道每个公司都有自己的员工档案信息数据库,如果需要查询某一个员工的具体信息档案,是不是一个一个的去查找呢?如果员工少,例如只有十几二十名还好,如果面对成千上万名员工,按此方法去查找,岂不浪费时间 ...

  2. C语言学习之时钟函数clock()函数

    // nomial.cpp : Defines the entry point for the console application. //多项式求解 //计时函数 //clock():从捕捉程序开 ...

  3. c++ linux 获取毫秒_Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间

    使用Linux的gettimeofday函数可以达到获取精确到毫秒级的时间,其中t1=t_start.tv_sec是公元1970年至今的时间(换算为秒),t2=t_start.tv_usec是当 前秒 ...

  4. C语言的clock函数

    clock函数功能:测试程序时间,测试从程序开始运行到clock被调用所耗费的时间. 头文件:time.h 时间单位:clock_tick,即"时钟打点" 数据类型clock_t ...

  5. 计算多项式的值(秦九昭算法,clock()函数的使用)

    /* clock()函数使用模板clock():捕捉从程序开始运行到clock()被调用所消耗的时间.这个时间单位是clock tick. 常数CLK_TCK:机器时钟每秒所走的时钟打点数 clock ...

  6. C语言中的clock函数

    这里是一个小白学习数据结构和C语言的学习笔记. C语言中的函数clock( ),它可以捕捉从程序开始运行到clock( )被调用时所耗费的时间.它计时所用的单位是clock tick,翻译成中文就是& ...

  7. clock函数在计算并行程序用时中存在的问题

    参考资料 CSDN - clock()函数在多线程时的问题 知乎 - C++下四种常用的程序运行时间的计时方法总结 CSDN - count_sort计数排序OpenMP的并行化 问题描述 在完成并行 ...

  8. python的clock函数,Python3 time clock()方法

    Python3 time clock()方法 描述 Python 3.8 已移除 clock() 方法 可以使用 time.perf_counter() 或 time.process_time() 方 ...

  9. clock()函数的使用

    clock() CLOCK计时函数 clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ...

最新文章

  1. mysql之 CentOS系统针对mysql参数优化
  2. C#模板编程(1):有了泛型,为什么还需要模板?
  3. Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks
  4. 在JDeveloper 12.1.3中将Java API用于WebSockets
  5. Linux 信号量互斥编程
  6. 数据结构(二):线性表的使用原则以及链表的应用-稀疏矩阵的三元组表示
  7. 【Vue】VSCode搭建Vue项目
  8. 鸟哥linux私房菜读后,鸟哥的Linux私房菜读书笔记(1)
  9. linux常见维护命令报错,Linux系统维护命令小结.ppt
  10. 微信小程序 自定义日期选择器
  11. 计算机主机电源灯不亮,电脑主机开不了机、电源灯不亮解决方法与技巧
  12. 【侠客行】Lombok深度解析
  13. 推荐几个免费的在线文本转语音网站(支持中英文多种语音)
  14. MySQL索引(详细,1万字长文)
  15. 畜牧业中资金问题的解决——活体贷技术和实现原理
  16. 学习Cortex-M:三种关中断方式
  17. 【vue】详情页数据请求
  18. w15作业--ZJM 与生日礼物(选做)
  19. unity 正六边形网格绘制(精简版)-代码可直接复用
  20. m.444lu.co show.php,PHP生成的Vcard:更改字符編碼,可以顯示重音字符。

热门文章

  1. c++中的vector的常见使用
  2. C++核心编程(一)
  3. dropout,batch norm 区别 顺序
  4. Bert系列(三)——源码解读之Pre-train
  5. PyTorch中文文档 说明书
  6. Windows10+anaconda,python3.5, 安装glove-python
  7. LeetCode简单题之移动零
  8. AIFramework框架Jittor特性(下)
  9. HarmonyOS系统概述
  10. CUDA 8混合精度编程