【问题标题】:Storing the result of LARGE_INTEGER / LARGE_INTEGER存储 LARGE_INTEGER / LARGE_INTEGER 的结果
【发布时间】:2014-03-22 13:48:06
【问题描述】:

我正在尝试为我正在制作的游戏开发一个简单的 Timer 类。目前,这个类所做的只是计算帧渲染所需的时间以进行一些 FPS 计算。

我正在使用 Window 的 QueryPerformanceCounter 函数 (here) 来获得尽可能高的分辨率(我已经通过 QueryPerformanceFrequency 获得了计算机的计数器频率)

这是我获取最后一帧时间(以秒为单位)的函数:

void update_time() { last = current; counter(&current); 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 longdouble 都是 8 个字节并且没有精度损失。也许这意味着相反..
  • @cantchooseusernames 将指数部分的使用空间加倍,因此精度较低。

标签: c++ performance timer


【解决方案1】:

哎呀,我完全忘记了进行整数除法会消除小数部分,无论您如何存储它:) 将最后一行更改为:

last_frame_time_secs = (double)last_frame_time / (double)timer_frequency.QuadPart;

修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多