C++ 将100纳秒转换为毫秒
注意:这可能是一个关于有缺陷的数学的问题,而不是一个问题 关于问题中描述的windows系统调用 我们正在使用C++ 将100纳秒转换为毫秒,c++,windows,time,filetime,C++,Windows,Time,Filetime,注意:这可能是一个关于有缺陷的数学的问题,而不是一个问题 关于问题中描述的windows系统调用 我们正在使用GetSystemTimeAsFileTime()win32调用,看到了我认为奇怪的结果,并希望得到一些澄清。从文件时结构上的MSDN 包含表示100纳秒数的64位值 自1601年1月1日(UTC)起的间隔时间 根据我们对本说明的阅读,返回的值是10e-8间隔秒数。假设这是正确的,那么下面的函数应该以毫秒为单位返回系统时间 DWORD get_milli_time() { FIL
GetSystemTimeAsFileTime()
win32调用,看到了我认为奇怪的结果,并希望得到一些澄清。从文件时结构上的MSDN
包含表示100纳秒数的64位值
自1601年1月1日(UTC)起的间隔时间
根据我们对本说明的阅读,返回的值是10e-8间隔秒数。假设这是正确的,那么下面的函数应该以毫秒为单位返回系统时间
DWORD get_milli_time() {
FILETIME f;
::GetSystemTimeAsFileTime(&f);
__int64 nano = (__int64(f.dwHighDateTime) << 32LL)
+ __int64(f.dwLowDateTime);
return DWORD(nano / 10e5);
}
如果我们使用这个值,我们会得到正确的结果,但我不明白为什么
在我看来,要从10e-8转换为10e-3,我们应该除以10e5。这似乎可以通过以下计算得到证实:
printf("%f\n", log10(10e-3 / 10e-8));
返回5(正如我所预料的)
但不知何故,我错了——但如果我能看出我错在哪里,那我就倒霉了。你的数学确实有缺陷,你对“工作”代码的理解也有缺陷 一秒钟有107到100纳秒的间隔,一毫秒有104纳秒的间隔。在浮点表示法中,这是
1.0e4
10e3
是一种奇怪的书写方式1e4
“正确”(在保持表达能力的同时效率最高)的代码应该是
return DWORD(hundrednano * 1.0e-4);
你的数学确实有缺陷,你对“工作”代码的理解也有缺陷 一秒钟有107到100纳秒的间隔,一毫秒有104纳秒的间隔。在浮点表示法中,这是
1.0e4
10e3
是一种奇怪的书写方式1e4
“正确”(在保持表达能力的同时效率最高)的代码应该是
return DWORD(hundrednano * 1.0e-4);
您是否尝试过调用
get_milli_time()
两次,间隔约5秒,并查看它给出的值?您是否尝试调用get_milli_time()
两次,间隔约5秒,并查看它给出的值?可能是记法错误<代码>10^3与10e3
一起使用,而实际上它是10^3=1e3
@Nacho:不可能,绝对不是。我的错误是科学符号不正确。谢谢。可能是记谱错误<代码>10^3与10e3
一起使用,而实际上它是10^3=1e3
@Nacho:不可能,绝对不是。我的错误是科学符号不正确。谢谢
return DWORD(hundrednano * 1.0e-4);