Python 以高精度跟踪当前时间的方法
我想知道如何用C语言尽可能精确地跟踪当前时间。特别是,我想知道C中是否有一个函数模仿Python的time.time() 我找到了下面的代码,但它只在几秒钟内循环Python 以高精度跟踪当前时间的方法,python,c,Python,C,我想知道如何用C语言尽可能精确地跟踪当前时间。特别是,我想知道C中是否有一个函数模仿Python的time.time() 我找到了下面的代码,但它只在几秒钟内循环 #include <time.h> int main() { time_t seconds; seconds = time(NULL); } #包括 int main(){ 时间t秒; 秒=时间(空); } 如果您使用POSIX兼容系统,您可以尝试使用clock\u gettime功能。它以纳秒为单位返回当前时间
#include <time.h>
int main() {
time_t seconds;
seconds = time(NULL);
}
#包括
int main(){
时间t秒;
秒=时间(空);
}
如果您使用POSIX兼容系统,您可以尝试使用clock\u gettime
功能。它以纳秒为单位返回当前时间
#include <time.h>
#include <stdint.h>
int main() {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
int64_t time_ns = ts.tv_sec * 1000000000LL + ts.tv_nsec;
return 0;
}
#包括
#包括
int main(){
结构timespects;
时钟获取时间(时钟实时,&ts);
int64\u t time\u ns=ts.tv\u sec*1000000000LL+ts.tv\u nsec;
返回0;
}
这将有助于:
#include<stdio.h>
#include<time.h>
int main()
{
clock_t t1, t2;
t1 = clock();
float diff = (t1 / 1000000.0F );
printf("%f",diff);
return 0;
}
#包括
#包括
int main()
{
时钟t1,t2;
t1=时钟();
浮动差=(t1/1000000.0F);
printf(“%f”,差异);
返回0;
}
您可以使用time.h
中的clock
功能以极高的精度测量时间
它将返回自参考帧以来经过的时钟数(参考帧是实现定义的,但它与程序的执行有关)
#包括
时钟现在=时钟();
现在,如果您想将其转换为实际可理解的时间单位,您应该将clock()
的结果除以CLOCKS\u PER\u SEC
,甚至可以将其乘以1000
,以毫秒为单位获得结果(除以CLOCKS\u PER\u SEC
后应保持精度)
double secs=now/CLOCKS\u PER_secs;//结果在几秒钟内
双毫秒=秒*1000;//结果以毫秒为单位
这将适用于所有系统
关于的更多信息,您需要一个cast
double secs=(double)now/CLOCKS\u PER\u secs另外,在一些系统上,你不能从clock()
@WeatherVane获得毫秒分辨率。实际上,(双精度)现在是可以的,但是这可能会缩小时钟的精度。更温和的选择是double secs=1.0*now/CLOCKS\u/SEC“代码>允许以最佳精度进行除法。@chux恢复Monica或双倍秒=现在/(双倍)每秒时钟”代码>类似于另一个答案。虽然时钟的精度不是很高。@WeatherVane通常是正确的。然而,clock\u t
和time\u t
仅被指定为一些标量。这只是因为强制转换不仅可以扩大类型,有时还会缩小,所以我尽量避免使用强制转换,除非没有其他好的解决方案。IAC,你关于now/CLOCKS\u PER\u second的弱点的观点代码>保持有效。不要假设时钟
具有该分辨率。每秒使用t1/(浮点)时钟。仔细想想,double
在这里更有意义。毕竟,OP需要很高的精度,所以不需要缩小clock\t
可能提供的范围。另外,如<代码>差异> /代码>可能很小,考虑<代码>“%g”< /代码>。<代码> TS.TVYSEC*1000000000 可以完全溢出A。建议ts.tv_sec*1000000000LL
或类似产品,以确保至少64位乘法。