c++ - 将存储在 int64_t 中的系统时钟(微秒)转换为 float ?

标签 c++ c

目前我有一个函数 f(),它以微秒为单位返回当前系统时钟。我需要将它转换为秒,在小数点后保留几位数字。我想将结果存储在一个 float 中(它足够长吗?)。

但是f()返回的是一个int64_t变量;我尝试了很多方法,例如:

(double)(f() / 1000000) + (double)((f() % 1000000) / (double)1000000);

和:

f() / 100000.f

但我得到的实际上看起来像“1318395904.000000”。

更新:

我想做的是计算我的程序的 FPS。似乎将其转换为第二优先是一个坏主意。我这样重写了我的程序,这两种方法都很好用:

(PS,av_gettime()就是我提到的函数f()。)

std::cout << "Yoooooo FPS: " << (float)5000000 / (float)(av_gettime() - prevFrameShowTime)
          << std::endl;
std::cout << "Current FPS: " << (double)5000000 / (double)(av_gettime() - prevFrameShowTime)
          << std::endl;

这是输出:

Yoooooo FPS: 60.623
Current FPS: 60.6097

最佳答案

您的 float 有(假设 IEEE-754)23 位尾数,您如何期望在其中存储 64 位值而不丢失精度?

(你显示的值需要31位来存储整秒,你的精度只到最近的128秒)

关于c++ - 将存储在 int64_t 中的系统时钟(微秒)转换为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735608/

相关文章:

c编程: what is the difference of the type conversions?

c - c中2个无符号字符*之间的memcpy

c - 下面的宏是做什么的?

java - 无法使用 "Install New Software"在使用 ubuntu 14.04 的 eclipse 上添加 cdt

c++ - 如何将具有 16 位整数的图像转换为 QPixmap

c++ - 在 TDD 中,我应该为一个方法编写多少测试?

c++ - 指针和循环依赖

c++ - 使用CRTP时如何调用派生类的构造函数?

c++ - 在 C++ 中是否不再需要清理代码?

c - libnfc cmake头文件编译错误