【发布时间】:2014-03-22 13:48:06
【问题描述】:
我正在尝试为我正在制作的游戏开发一个简单的 Timer 类。目前,这个类所做的只是计算帧渲染所需的时间以进行一些 FPS 计算。
我正在使用 Window 的 QueryPerformanceCounter 函数 (here) 来获得尽可能高的分辨率(我已经通过 QueryPerformanceFrequency 获得了计算机的计数器频率)
这是我获取最后一帧时间(以秒为单位)的函数:
void update_time()
{
last = current;
counter(¤t);
last_frame_time = current.QuadPart - last.QuadPart;
last_frame_time_secs = last_frame_time / timer_frequency.QuadPart;
}
目前,last_frame_time_secs 是一个双变量。当我编译时,我得到一个警告:
warning C4244: '=' : conversion from 'LONGLONG' to 'double', possible loss of data
并且 last_frame_time_secs 始终为 0.0。我认为这是因为除法的结果太小以至于双打无法存储?我可以使用任何更大的数据结构吗?
【问题讨论】:
-
请参阅:paste.rohitab.com/2862 特别是
LPCSTR GetCodeSpeed(CODESPEED *cs)不知道为什么它说数据丢失,因为long long和double都是 8 个字节并且没有精度损失。也许这意味着相反.. -
@cantchooseusernames 将指数部分的使用空间加倍,因此精度较低。
标签: c++ performance timer