clock函数返回负值~ (转)
使用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函数返回负值~ (转)相关推荐
- clock函数返回精度都是上万的_Excel常用函数每日一讲 VLOOKUP函数
我们都知道每个公司都有自己的员工档案信息数据库,如果需要查询某一个员工的具体信息档案,是不是一个一个的去查找呢?如果员工少,例如只有十几二十名还好,如果面对成千上万名员工,按此方法去查找,岂不浪费时间 ...
- C语言学习之时钟函数clock()函数
// nomial.cpp : Defines the entry point for the console application. //多项式求解 //计时函数 //clock():从捕捉程序开 ...
- c++ linux 获取毫秒_Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
使用Linux的gettimeofday函数可以达到获取精确到毫秒级的时间,其中t1=t_start.tv_sec是公元1970年至今的时间(换算为秒),t2=t_start.tv_usec是当 前秒 ...
- C语言的clock函数
clock函数功能:测试程序时间,测试从程序开始运行到clock被调用所耗费的时间. 头文件:time.h 时间单位:clock_tick,即"时钟打点" 数据类型clock_t ...
- 计算多项式的值(秦九昭算法,clock()函数的使用)
/* clock()函数使用模板clock():捕捉从程序开始运行到clock()被调用所消耗的时间.这个时间单位是clock tick. 常数CLK_TCK:机器时钟每秒所走的时钟打点数 clock ...
- C语言中的clock函数
这里是一个小白学习数据结构和C语言的学习笔记. C语言中的函数clock( ),它可以捕捉从程序开始运行到clock( )被调用时所耗费的时间.它计时所用的单位是clock tick,翻译成中文就是& ...
- clock函数在计算并行程序用时中存在的问题
参考资料 CSDN - clock()函数在多线程时的问题 知乎 - C++下四种常用的程序运行时间的计时方法总结 CSDN - count_sort计数排序OpenMP的并行化 问题描述 在完成并行 ...
- python的clock函数,Python3 time clock()方法
Python3 time clock()方法 描述 Python 3.8 已移除 clock() 方法 可以使用 time.perf_counter() 或 time.process_time() 方 ...
- clock()函数的使用
clock() CLOCK计时函数 clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ...
最新文章
- mysql之 CentOS系统针对mysql参数优化
- C#模板编程(1):有了泛型,为什么还需要模板?
- Codeforces Gym 101173 CERC 16 D BZOJ 4790 Dancing Disks
- 在JDeveloper 12.1.3中将Java API用于WebSockets
- Linux 信号量互斥编程
- 数据结构(二):线性表的使用原则以及链表的应用-稀疏矩阵的三元组表示
- 【Vue】VSCode搭建Vue项目
- 鸟哥linux私房菜读后,鸟哥的Linux私房菜读书笔记(1)
- linux常见维护命令报错,Linux系统维护命令小结.ppt
- 微信小程序 自定义日期选择器
- 计算机主机电源灯不亮,电脑主机开不了机、电源灯不亮解决方法与技巧
- 【侠客行】Lombok深度解析
- 推荐几个免费的在线文本转语音网站(支持中英文多种语音)
- MySQL索引(详细,1万字长文)
- 畜牧业中资金问题的解决——活体贷技术和实现原理
- 学习Cortex-M:三种关中断方式
- 【vue】详情页数据请求
- w15作业--ZJM 与生日礼物(选做)
- unity 正六边形网格绘制(精简版)-代码可直接复用
- m.444lu.co show.php,PHP生成的Vcard:更改字符編碼,可以顯示重音字符。