Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以高精度跟踪当前时间的方法_Python_C - Fatal编程技术网

Python 以高精度跟踪当前时间的方法

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功能。它以纳秒为单位返回当前时间

我想知道如何用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>
#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 secsclock()
@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位乘法。